1. Du übergibst
RGB() immernoch die falsche Reihenfolge! Dies hatte ich oben schon angemerkt. Erst rot, grün und dann blau.
2. PRGBTriple ist ein Zeiger auf einen Zeiger und kein Array Typ. Du kannst den Pointer mit Inc() einfach inkrementieren um auf den nächsten Pixel zu zu greifen. Es ist kein Array - aber das hat dir der Compiler schon gesagt.
3. Wenn du die Zeiger inkrementierst, dann solltest du dies immer machen und nicht nur wenn die If Bedingung hinhaut, sonst würdest du ständig auf der Stelle trampeln.
Delphi-Quellcode:
for y := 0
to Layer2.Height-1
do
begin
P := Layer2.Scanline[y];
P2 := img.Picture.Bitmap.ScanLine[y];
for x := 0
to Layer2.Width-1
do
Begin
if RGB(P^.rgbRed, P^.rgbGreen, P^.rgbBlue) <> ColorToRGB(clFuchsia)
then
P2^ := P^;
Inc(P2);
Inc(P);
End;
end;