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).
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.