File: unit28.pas

package info (click to toggle)
dozzaqueux 3.35-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 5,620 kB
  • ctags: 1,791
  • sloc: pascal: 34,605; xml: 961; makefile: 50; sh: 32
file content (61 lines) | stat: -rwxr-xr-x 1,982 bytes parent folder | download | duplicates (6)
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
unit Unit28;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,Graphics,LCLType,UnitScaleFont;


  type arraycouleurs=array of tcolor;

procedure Degrade(couleurdepart,couleurarrivee:tcolor; nombrecouleurs:integer;
var tableaucouleurs:arraycouleurs);

implementation
FUNCTION RGB(CONST r,g,b:  BYTE):  TColor;
  BEGIN
    RESULT := (r OR (g SHL 8) OR (b SHL 16))
  END {RGB};

  function GetRValue(Color: TColor): Byte;
begin
  Result := Byte(Color);
end;

function GetGValue(Color: TColor): Byte;
begin
  Result := Byte(Color shr 8);
end;

function GetBValue(Color: TColor): Byte;
begin
  Result := Byte(Color shr 16);
end;

procedure Degrade(couleurdepart,couleurarrivee:tcolor; nombrecouleurs:integer;
var tableaucouleurs:arraycouleurs);
var
  couleurdepartRGB   : Array[0..2] Of Byte;
  couleuractuelleRGB : Array[0..2] Of Byte;
  incrementcouleurRGB   : Array[0..2] Of Integer;
  i:integer;
Begin
   if nombrecouleurs<=1 then exit;
  couleurdepartRGB[0] := GetRValue( ColorToRGB( couleurdepart ) );
  couleurdepartRGB[1] := GetGValue( ColorToRGB( couleurdepart ) );
  couleurdepartRGB[2] := GetBValue( ColorToRGB( couleurdepart ) );
  incrementcouleurRGB[0] := GetRValue( ColorToRGB( couleurarrivee )) - couleurdepartRGB[0];
  incrementcouleurRGB[1] := GetgValue( ColorToRGB( couleurarrivee )) - couleurdepartRGB[1];
  incrementcouleurRGB[2] := GetbValue( ColorToRGB( couleurarrivee )) - couleurdepartRGB[2];
   setlength(tableaucouleurs,nombrecouleurs);
      for i:=1 to nombrecouleurs do begin
      couleuractuelleRGB[0] := (couleurdepartRGB[0] + MulDiv( i-1 , incrementcouleurRGB[0] , nombrecouleurs-1 ));
      couleuractuelleRGB[1] := (couleurdepartRGB[1] + MulDiv( i-1 , incrementcouleurRGB[1] , nombrecouleurs-1  ));
      couleuractuelleRGB[2] := (couleurdepartRGB[2] + MulDiv( i-1 , incrementcouleurRGB[2] , nombrecouleurs-1  ));
      tableaucouleurs[i-1]:=RGB(couleuractuelleRGB[0],couleuractuelleRGB[1],couleuractuelleRGB[2]);
      end;
      end;
end.