Einfach Scanline verwenden und die Farbwerte umdrehen, fertig.
Delphi-Quellcode:
procedure NegativeBitmapFX(aBitmap: TBitmap);
var
x, y: integer;
p: pbytearray;
begin
aBitmap.PixelFormat := pf24Bit;
for y := 0 to aBitmap.Height - 1 do
begin
p := aBitmap.scanline[y];
for x := 0 to (aBitmap.Width * 3) - 1 do
p[x] := 255 - p[x]; // oder: p[x] := not p[x];
end;
end;
// Aufruf zB. so:
procedure TForm1.Button1Click(Sender: TObject);
begin
NegativeBitmapFX(image1.picture.bitmap);
image1.Refresh;
end;
// Edit:- Verschlimmbesserung ausgebessert.
- Die Idee mit dem not hinzugefügt ( auf diese Idee währe ich im Leben nicht gekommen )