DruckenMister WongFacebook

Invertieren eines Bitmaps

System Win9x, WinNT, Win2000, WinXP, Vista, Win7
Ab Delphi-Version Delphi 1
Letzte Änderung 28.09.2010

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;