Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi farbe ersetzen (https://www.delphipraxis.net/22019-farbe-ersetzen.html)

gekmihesg 11. Mai 2004 12:48


farbe ersetzen
 
ich möchte in einem tbitmap eine farbe koplett durch eine andere farbe ersetzen (so wie bei paint mit dem eimer nur ohne grenzen).

ich hab das so gelöst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y: integer;
//lc: TColor (global)
begin
  for y:=0 to image1.Height-1 do
    for x:=0 to image1.Width-1 do
      if image1.Canvas.Pixels[x,y] = lc then
        image1.Canvas.Pixels[x,y]:=colorbox1.Selected;
  lc:=colorbox1.Selected;
end;
gibt es da ne schnellere möglichkeit?

Muetze1 11. Mai 2004 12:59

Re: farbe ersetzen
 
Moin!

Klar, du kannst das ganze über die ScanLine[] Property ansprechen, das dürfte schneller gehen. Problem ist dabei nur, das du die unterschiedlichen Farbtiefen einzelnd behandeln musst.

MfG
Muetze1

dizzy 11. Mai 2004 12:59

Re: farbe ersetzen
 
TBitmap.Scanline oder die Graphics32-Library ( www.g32.org )

gekmihesg 11. Mai 2004 13:49

Re: farbe ersetzen
 
ok...
wie geh ich mit dem scanline um?
das liefert mir ein TByteArray zurück und was kann ich dann damit machen?

dizzy 11. Mai 2004 16:50

Re: farbe ersetzen
 
Das ist nicht immer so pauschal beantwortbar. Es kommt darauf an, welches PixelFormat dein Bitmap hat. Es gibt zu Scanline auch gute Tutorials (Dieses ab Seite 2 dürfte dich interessieren).

Mit der Graphics32 brauchst du im Übrigen nur TBitmap durch TBitmap32 ersetzen, und das Farbformat ist nicht TColor, sondern TColor32 (ist in der Hilfe zu g32 beschrieben). Im wesentlichen genau so habhabbar wie TColor.
Die Eigenschaft Pixels[x,y] ist bei der g32 auch dabei, aber deutlich performanter implementiert :!:
Das soll heissen, dass du deinen Code mit der g32 nur minimal verändern müsstest ;) (Sie bietet auch noch einige weitere Annehmlichkeiten!)

gruss,
dizzy


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz