Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farben ersetzen (https://www.delphipraxis.net/42499-farben-ersetzen.html)

Jarmen_Kell 21. Mär 2005 20:37

Re: Farben ersetzen
 
Warum sollte ich das nicht tun?

Und: wie geht das ScanLine dann?

Pr0g 21. Mär 2005 22:25

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.

Jarmen_Kell 22. Mär 2005 11:16

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

Pr0g 22. Mär 2005 12:25

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.

Jarmen_Kell 22. Mär 2005 13:06

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 !

ferby 11. Feb 2006 20:12

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:
procedure TForm1.FormPaint(Sender: TObject);
begin
  BitBlt(pbox.Canvas.Handle, 0, 0, Grafik.Width, Grafik.Height, Grafik.Canvas.Handle, 0, 0, SrcCopy);
end;
und im oncreat steht

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?

Pr0g 12. Feb 2006 01:44

Re: Farben ersetzen
 
Hast du das Pixelformat von "grafik" auf 32Bit gesetzt, nach dem Create?
Delphi-Quellcode:
grafik.PixelFormat := pf32Bit;

ferby 12. Feb 2006 09:37

Re: Farben ersetzen
 
Hallo,

Nein habe ich nicht,
danke funktioniert jetzt alles,

was heißt diese Zeile?

Khabarakh 12. Feb 2006 09:57

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.

ferby 21. Feb 2006 18:49

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:
        fLine.rgbBlue := 0;
        fLine.rgbGreen := 0;
        fLine.rgbRed := 255;
einen einzigen Integer Wert???


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr.
Seite 2 von 3     12 3      

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