Fonction bmpeffetgris (transforme un bitmap couleur en gris)

Description

Cette fonction montre comment on peut récupérer et traiter les pixel d'un bitmap plus rapidement (en bas-niveau) que l'utilisation de Bitmap.Canvas.Pixel[x,y] (qui est relativement long suivant la taille de l'image).

Exemple d'utilisation avec un TImage:
Image1.Picture.Bitmap:=BMPEffetGris(Image1.Picture.Bitmap);

Source / Exemple :


function BmpEffetGris(Bmp:TBitmap):TBitmap;
type
 TRVB=record
  R:integer;
  V:integer;
  B:integer;
  end;
 TRGBArray=array [0..0] of TRGBTriple; {TRGBTriple est codé dans Windows.pas}
 PRGBArray= ^TRGBArray;
var
 TabScanLine,TSLFinal: array of PRGBArray;
 RVB:TRVB;
 j,a,b,moyenne:integer;
 ImgFinal:TBitmap;
begin
 // ne fonctionne que pour un bitmap de 24 bit et au format DIB
 BMP.HandleType:=bmDIB;
 BMP.PixelFormat:=pf24Bit;
 ImgFinal:=TBitmap.Create;
 ImgFinal.Assign(BMP);
 // définir la taille des tableaux dynamiques
 SetLength(TabScanLine,BMP.Height);
 SetLength(TSLFinal,ImgFinal.Height);
 For j:=0 to BMP.Height-1 do begin
  // transférer les information de l'image dans les tableaux
  TabScanLine[j]:=BMP.ScanLine[j];
  TSLFinal[j]:=ImgFinal.ScanLine[j];
 end;
 For a:=0 to BMP.Height-1 do begin
  For b:=0 to BMP.Width-1 do begin
   // récupérer les composantes couleur du pixel
   RVB.R:=TabScanLine[a,b].rgbtRed;
   RVB.V:=TabScanLine[a,b].rgbtGreen;
   RVB.B:=TabScanLine[a,b].rgbtBlue;
   // calcul de la moyenne des trois composantes de la couleur
   moyenne:=(RVB.R+RVB.V+RVB.B) div 3;
   // appliquer les nouvelles composantes de la couleur
   TSLFinal[a,b].rgbtRed:=moyenne;
   TSLFinal[a,b].rgbtGreen:=moyenne;
   TSLFinal[a,b].rgbtBlue:=moyenne;
  end;
  // éviter de bloquer d'autres programmes en cours pendant les boucles
  Application.ProcessMessages;
 end;
 TabScanLine:=nil;
 Result:=ImgFinal;
end;

Conclusion :


Je ne crois pas avoir vu ce type de source dans le site (avec l'utilisation de scanline).

Codes Sources

A voir également

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.