Fonction bmpeffetgris (transforme un bitmap couleur en gris)

Soyez le premier à donner votre avis sur cette source.

Vue 4 434 fois - Téléchargée 309 fois

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

Ajouter un commentaire

Commentaires

cs_TheHacker
Messages postés
442
Date d'inscription
samedi 23 novembre 2002
Statut
Membre
Dernière intervention
19 octobre 2005
-
bonne source, merci.

9/10
Spatul
Messages postés
12
Date d'inscription
mercredi 21 août 2002
Statut
Membre
Dernière intervention
9 octobre 2008
-
Merci de cette info, elle va me servir très bientôt...

A+
sepecat
Messages postés
2
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
27 novembre 2003
-
Salut,

On peut également utiliser la luminance...

NewColor := Trunc((R * 0.299) +(G * 0.587) + (B * 0.114)) ;

Affecter ensuite NewColor à R puis G puis B.

A+

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.