1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| Procedure Degrader( CanvasCible : TCanvas; Dim : TRect; CoulDeb,CoulFin : Tcolor; Vertical : boolean);
// Param CanvasCible = Canvas cible
// Param Dim = Rectangle-Dimensions du canvas-cible
// Param CoulDeb,CoulFin = couleurs de début et de fin
// Param Vertical : True pour dégradé vertical sinon dégradé horizontal.
type TRGB = record R,G,B : integer; end;
var Frange : TRect; // Frange rectangulaire pour tracé couleur courante variable
i : Integer; // Compteur pour parcourir la hauteur du canvas
cDeb : TRGB; // valeurs RGB de la couleur de Deb
cDeg : TRGB; // valeurs RGB de la couleur courante
eD_F : TRGB; // écarts de RGB entre couleurs de Deb et de Fin
begin // valeurs RGB de la couleur de Debut
cDeb.R := GetRValue(ColorToRGB(CoulDeb));
cDeb.G := GetGValue(ColorToRGB(CoulDeb));
cDeb.B := GetBValue(ColorToRGB(CoulDeb));
// écarts RGB entre couleurs de Deb et de Fin
eD_F.R := GetRValue(ColorToRGB(CoulFin )) - cDeb.R;
eD_F.G := GetgValue(ColorToRGB(CoulFin )) - cDeb.G;
eD_F.B := GetbValue(ColorToRGB(CoulFin )) - cDeb.B;
// Initialisation des dimensions de la Frange de couleur
Frange.Left := Dim.Left;
Frange.Right:= Dim.Right - Dim.Left;
// Boucle de remplissage en dégradé du canvas
with CanvasCible do
begin for i:= 0 to 255 do
begin // Dimensions de la Frange
if Vertical = true then
begin Frange.Left := Dim.Left;
Frange.Right:= Dim.Right - Dim.Left;
Frange.Top := MulDiv(i, Dim.Bottom - Dim.top, 256);
Frange.Bottom := MulDiv(i+1, Dim.Bottom - Dim.top, 256);
end else
begin Frange.Top:=Dim.top;
Frange.Bottom:= Dim.Bottom - Dim.top;
Frange.left := MulDiv(i, Dim.Right - Dim.Left, 256);
Frange.right := MulDiv(i+1 , Dim.Right - Dim.Left, 256);
end;
// couleur courante dégradée
cDeg.R := (cDeb.R + MulDiv(i, eD_F.R, 255)) mod 256;
cDeg.G := (cDeb.G + MulDiv(i, eD_F.G, 255)) mod 256;
cDeg.B := (cDeb.B + MulDiv(i, eD_F.B, 255)) mod 256;
// Tracé sur canvas
Brush.color:=RGB(cDeg.R, cDeg.G, cDeg.B);
FillRect(Frange);
end;
end;
end;
// Utilisation :
procedure TfrmTextures.btnDegraderClick(Sender: TObject);
var R : TRect;
begin with imageTexture do // imageTexture est ici un Timage dans lequel
// je crée un dégradé sur toute la surface à partir des couleurs de
// deux Tpanel (plCoulDeb et plCoulFin et d'un RadioButton
// (rbVertical) en fonction duquel le dégradé sera horizontal ou
// vertical.
begin R:=Rect(0,0,width,height);
Degrader( Canvas, R, plCoulDeb.Color, plCoulFin.Color,
rbVertical.Checked);
end;
end; |
Partager