Convertir un Bitmap en nuances de gris

function Gray(Bitmap: TBitmap): TBitmap;
var i, j: Integer;
Grayshade, Red, Green, Blue: Byte;
PixelColor: Longint;
begin
with Bitmap do
for i := 0 to Width - 1 do
for j := 0 to Height - 1 do
begin
PixelColor := ColorToRGB(Canvas.Pixels[i,j]);
Red := PixelColor;
Green := PixelColor shr 8;
Blue := PixelColor shr 16;

Grayshade := (Red + Green + Blue) div 3;
Canvas.Pixels[i,j] := RGB(Grayshade,Grayshade,Grayshade);
end;
Result := Bitmap;
end;
Commentaire des internautes
avatar
Jacques le 24/11/2002
Cette méthode produit une gamme de gris qui ne tient pas compte des caractéristiques de la vision humaine.
En vidéo on utilise la fonction luminance qui représente mieux les jaunes et les verts +clairs pour notre oeil ).
// fonction clamp indispensable en colorimétrie
Function Lim00FF ( valeur : extended ) : Byte ;
begin
if valeur > $FF then result := $FF
else if valeur > $00 then result := round(valeur)
else result := $00 ;
end ;

function Luminance ( couleur : TColor ) : integer ;
begin

// r=0.2125 ; g=0.7154 ; b=0.0721 en HDTV !

result := Lim00FF (( 0.299 * GetRvalue(couleur) ) +
( 0.587 * GetGvalue(couleur) ) +
( 0.114 * GetBvalue(couleur) )) ; end ;


// exemple d\'application

function CouleurNoirEtBlanc (couleur : Tcolor ) : TColor ;
var
Y : byte ; // Y est le symbole de la luminance en vidéo
begin
Y := Luminance ( couleur ) ;
result := RGB ( Y,Y,Y ) ;
end ;
Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour24/11/2002
VisualisationVu 2044 fois
PublicInternaute zz
CategorieDelphi - Trucs et astuces - Graphisme
Auteur de l'article
SwissDelphiCenter SwissDelphiCenter
connecté le 02/11/2011
329 articles dans la section
Contacter l'auteur