Home » Tipps & Tricks » Grafik » Grafikbearbeitung » Invertieren eines Bitmaps

Invertieren eines Bitmaps

Bei der Invention eines Bitmaps werden alle Farbwerte umgekehrt, so dass es aussieht, als hätte man ein Negativ vor sich.
Zuerst ist diese Typenvereinbarung erforderlich:

type
  TFarbArray = array[0..0] of TRGBTriple;
  pFarbArray = ^TFarbArray;

Dann kommt die Inventieren-Prozedur:

procedure Inventieren(const Bitmap: TBitmap);
var
  i,j:Integer; Reihe: ^TRGBTriple;
begin
  for i:= 0 to Bitmap.Height-1 do
  begin
    Reihe:= Bitmap.Scanline[i];
    for j:= 0 to Bitmap.Width-1 do
    begin
     Reihe^.rgbtred   := not Reihe^.rgbtred;
     Reihe^.rgbtBlue  := not Reihe^.rgbtblue;
     Reihe^.rgbtgreen := not Reihe^.rgbtgreen;
     inc(Reihe);
    end;
  end;
  bitmap.Assign(Bitmap);
end;

Die erste Schleife geht jedes Pixel in der Höhe durch, die Zweite jedes in der Breite. Dann wird jeder Fabwert mit dem not-Operator umgekehrt.

Über die Scanline-Funktion bietet das Internet ausreichend erklärenden Stoff.
Der Aufruf dieser Prozedur ist selten einfach:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Inventieren(Image1.Picture.Bitmap);
end;