// Fonction pour convertir un BMP en niveaux de gris
Function GrayScale(srcBmp, DstBmp : TBitmap): Boolean;
Type
TRGBArray = Array[0..0] Of TRGBTriple;
PRGBArray = ^TRGBArray;
Var
GrayScale : PRGBArray;
BH, BW, Gray : integer;
Begin
Result := False;
If (SrcBmp = Nil) or (DstBmp = Nil) or SrcBmp.Empty Then Exit;
With DstBmp Do
Begin
PixelFormat := Pf24Bit;
Width := SrcBmp.Width;
Height := SrcBmp.Height;
// pour ne pas modifier l'image originale on fait une copie dans DstBmp
//
BitBlt(Canvas.Handle, 0, 0, Width, Height,
SrcBmp.Canvas.Handle, 0, 0, srcCopy);
For BH := 0 To Height - 1 Do
Begin
GrayScale := Scanline[BH];
For BW := 0 To Width - 1 Do
With GrayScale[BW] Do
Begin
Gray := Round(RGBTRed * 0.3 + RGBTGreen * 0.59 + RGBTBlue * 0.11);
RGBTRed := Gray;
RGBTGreen := Gray;
RGBTBlue := Gray;
End;
End;
End;
End;
// Utilisation :
// Bmp est l'image d'origine
// Tmp l'image en niveaux de gris
// Image1 pour visionner le résultat
procedure TfrmMain.Button1Click(Sender: TObject);
Var Tmp : TBitmap;
begin
Tmp := TBitmap.Create;
GrayScale(Bmp, Tmp);
Image1.Picture.Assign(Tmp);
Tmp.Free;
end;