Wie wäre es, wenn du den entsprechenden Quellcode mal postest? Das sagt mehr als tausend Worte und bei Pointeroperationen ist nun mal jede Kleinigkeit wichtig.
Hier aber dennoch ein paar Hinweise im Umgang mit Scanlines.
Ganz wichtig. Immer das Pixelformat überprüfen bzw. von Hand auf einen entsprechenden Wert setzen. Sonst geht es schneller als du denkst und du greifst auf etwas anders zu.
Ich persönlich mache es immer so.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var X, Y: Integer; pPix: PRGBTriple; pPix: PRGBQuad; begin for Y := 0 to Bmp.Height -1 do begin pPix := Bmp.ScanLine[Y];
for X := 0 to Bmp.Width do begin pPix^.rgbtBlue := 255;
Inc (pPix); end; end; end; |
Das ist die einfachste und schnellste Methode. Das geht aber nur, wenn du nicht Pixelübergreifend arbeitest. Sonst muss man sich etwas anderes einfallen lassen. Je nachdem wie häufig du auf Scanline (immer wieder auf die selben Zeilen) zugreifst kannst du die Adressen auch ein Mal in ein Array schreiben und sie dann aus dem Array holen. Aber auch nur so lange wie das Bild existiert und du daran nichts (Pixelformat, Größe) geändert hast.
PS: @Phantom1: Das ist meiner Meinung nach keine gute Methode, da es auch wieder wahnsinnig Langsam wird, wenn du das gesammte Bild neu Zeichnen möchtest. Scanline macht in diesem Falle so viel, dass der Geschwindigkeitsvorteil gegenüber Pixels nicht wirklich groß ist.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.