{ Cette procédure utilise la propriété ScanLine[] qui permet
d'avoir une vitesse presque trente foix supérieure que l'acces simple à
la propriété Pixels[] utilisant les méthodes API GetPixel() et SetPixel() }
procedure InvertBitmapColors(const Bmp: TBitmap);
type
TLine = array[Word] of TRGBTriple;
PLine = ^TLine;
var
X, Y: Integer;
OldPixelFmt: TPixelFormat;
Line: PLine;
begin
OldPixelFmt := Bmp.PixelFormat;
{ Mise du bitmap en 32 bits par pixel :
pas de changement de l'octet alpha s'il existait. }
Bmp.PixelFormat := pf24bit;
for Y := 0 to Bmp.Height -1 do
begin
Line := Bmp.ScanLine[Y];
for X := 0 to Bmp.Width -1 do
begin
{ Inversion des couleurs. }
Line[X].rgbtRed := not Line[X].rgbtRed;
Line[X].rgbtGreen := not Line[X].rgbtGreen;
Line[X].rgbtBlue := not Line[X].rgbtBlue;
end;
end;
{ Restauration du mode de pixel d'origine. }
Bmp.PixelFormat := OldPixelFmt;
end;