ScanLine
liefert dir einen Zeiger auf den ersten Pixel der Zeile. Du vergleichst hier mit if c1 <> c2 then
jeweils zwei Zeiger, was nicht wirklich zielführend ist
Falsch gelesen
Fritz hat schon recht. Der Vergleich sollte je nach PixelFormat mit den korrekten Datentypen durchgeführt werden. Warum? Ganz einfach: Ausgehend von 32-Bit hättest du
ScanLine[0] = 1. Pixel = Scanline + $00
aber
ScanLine[1] = 2. Pixel = Scanline + $04
. Da du aber
PByte
über den Array Operator indizierst, ist bei dir
ScanLine[1] = Scanline + $01
was "irgendwo" im 1. Pixel liegt. Kann man natürlich auch so machen, aber dann sollte deine Schleife nicht bis
.Width
laufen, sondern bis
.Width * 4
(und die Diskrepanz zu
.Pixels
musst du dann natürlich bewusst ignorieren, da du in diesem Falle mit
ScanLine
auf Byte Granularität arbeitest,
.Pixels
aber immer auf den kompletten Pixeln).