Moin!
Zitat von
steppo:
Was passiert hier:
Delphi-Quellcode:
P^.rgbRed := 0;
P^.rgbGreen := 0;
P^.rgbBlue := $ff; <-- haben wir ja schon, siehe IF Bedingung
Im 32 Bit Farben Modus besteht ein Pixel aus 4 Bytes: 1 Byte Rotanteil, 1 Byte Grünanteil, 1 Byte Blauanteil und 1 Füllbyte. Die TRGBQuad Struktur setzt sich aus den 4 Elementen zusammen. Darin hast du 4 Elemente definiert: rgbRed, rgbGreen, rgbBlue und rgbReserved. Das sind die 4 Elemente und deren Funktion sollte klar sein.
ScanLine liefert dir immer ein Zeiger auf das 1. Byte der jeweiligen Zeile zurück und ich habe mir die Variable P als PRGBQuad definiert, also ein Zeiger auf diese oben angesprochene TRGBQuad Struktur. Damit habe ich also beim zuweisen von P := ScanLine[y]; sofort einen Zeiger auf das erste Pixel und ich erhalte damit sofort z.B. den Rotanteil des Pixel mit P.rgbRed (das ^ vor dem . ist ab Delphi 5 optional).
So, nun zu deiner Frage: Dieser 3-zeiler weisst die Farbe Blau dem Pixel zu. Die Farbe blau besteht aus 0 Rotanteil, 0 Grünanteil und vollen 255 Blauanteil. Diese weise ich zu ($ff = hexadezimalzahl FF = 255 dezimal).
Zitat von
steppo:
Habe die Einfärbung unter dem oben genannten Code vorgenommen.
Canvas.Pixels[x, y] := clBlue;
? Wie ist das zu verstehen? Hast du in der ScanLine Routine nochmals diese Zeile eingefügt? Warum? Dann ist doch der gesamte Geschwindigkeitsvorteil von ScanLine wieder dahin??!?!
MfG
Muetze1