![]() |
Re: Farben ersetzen
Warum sollte ich das nicht tun?
Und: wie geht das ScanLine dann? |
Re: Farben ersetzen
Liste der Anhänge anzeigen (Anzahl: 1)
Webb du auf ein Image direkt zeichnest kann es zu fehlern kommen. Für sowas ist die Paintbox gedacht.
Hab dir hier mal ein kleines Beispiel gemacht. Zuerst wird ein Bitmap erzeugt und drauf gezeichnet. Als nächstes wird mit Scanline und zwei Schleifen jedes Pixel geprüft und wenns Blau ist in Rot geändert. |
Re: Farben ersetzen
Liste der Anhänge anzeigen (Anzahl: 1)
ok, muss ich dann das ganze hier ( Anhang ) umschreiben?
evtl TImage mit TPaintbox ersetzen?!? Und geht das dann auch noch alles? Anhang: |~| paeint.zip |
Re: Farben ersetzen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich würde das TImage wegmachen und alle Operationen (Zeichnen, Laden, speichern...) auf ein TBitmap anwenden. (Ich glaube für das Undo nutzt du auch ein Image, dafür kannst du sowieso ein TBitmap nutzen). Dann kannst du das TBitmap per BitBlt auf deine Form blitten, musst nur nach jeder Zeichenoperation das onPaint der Form, oder PaintBox aufrufen. Ich habe nochmal ein Beispiel gemacht.
|
Re: Farben ersetzen
Also doch mehr oder weniger alles umschreiben ..
naja dann fang' ich mal an ^^ ( aber ich bin mir sicher, dass ich demnächst wieder was davon fragen werde ;) ) Danke schon mal ! |
Re: Farben ersetzen
Hallo,
Bei mir funktioniert der Quellcode nicht.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,y: integer; fLine: PRGBQuad; begin for y := 0 to Grafik.Height - 1 do begin fLine := Grafik.ScanLine[y]; for x := 0 to Grafik.Width - 1 do begin if (fLine.rgbBlue = 255) and (fLine.rgbGreen = 255) and (fLine.rgbRed = 255) then begin fLine^.rgbBlue := 0; fLine^.rgbGreen := 0; fLine^.rgbRed := 255; end; Inc(fLine); end; end; FormPaint(NIL); end;
Delphi-Quellcode:
und im oncreat steht
procedure TForm1.FormPaint(Sender: TObject);
begin BitBlt(pbox.Canvas.Handle, 0, 0, Grafik.Width, Grafik.Height, Grafik.Canvas.Handle, 0, 0, SrcCopy); end;
Delphi-Quellcode:
with grafik do
begin Height:=200; Width:=200; canvas.pen.color:=clwhite; canvas.brush.color:=clwhite; canvas.Rectangle(0,0,200,200); end; wobei grafik: TBitmap; ist. Ich will das die Weiße Fläche die Farbe Rot animmt. Die Schleife wird ausgeführt, nur es ändert sich nichts. Warum? |
Re: Farben ersetzen
Hast du das Pixelformat von "grafik" auf 32Bit gesetzt, nach dem Create?
Delphi-Quellcode:
grafik.PixelFormat := pf32Bit;
|
Re: Farben ersetzen
Hallo,
Nein habe ich nicht, danke funktioniert jetzt alles, was heißt diese Zeile? |
Re: Farben ersetzen
Nun ja, das Pixelformat wird eben auf 32 Bit (ARGB) gesetzt :wink: . Da in der Prozedur tagRGBQUAD, also 4 Byte pro Pixel, benutzt wird, muss das Bitmap auch genau dieses Format haben.
|
Re: Farben ersetzen
Hallo,
ich möchte die Prozedur so umschreiben das ich statt den drei RGB Werten einen Integer Wert bekomme. Jede Farbe hat in Delphi seinen eigenen Integer Wert, wie bekomme ich den aus den RGB Werten?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,y: integer; fLine: PRGBQuad; begin for y := 0 to Grafik.Height - 1 do begin fLine := Grafik.ScanLine[y]; for x := 0 to Grafik.Width - 1 do begin if (fLine.rgbBlue = 255) and (fLine.rgbGreen = 255) and (fLine.rgbRed = 255) then begin fLine^.rgbBlue := 0; fLine^.rgbGreen := 0; fLine^.rgbRed := 255; end; Inc(fLine); end; end; end; wie bekomme ich daraus:
Delphi-Quellcode:
einen einzigen Integer Wert???
fLine.rgbBlue := 0;
fLine.rgbGreen := 0; fLine.rgbRed := 255; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz