Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Scanline erklären

  Alt 11. Mär 2005, 23:52
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
  Mit Zitat antworten Zitat