{ 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;
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.