Autor Beitrag
loetmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29


Delphi 3
BeitragVerfasst: Do 24.02.05 00:53 
Hallo,

ich habe gerade nicht zufriedenstellendes zum Thema im Forum gefunden (auf die schnelle) und habe mich selber 'fix' ran gesetzt und folgende Funktion geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
{
Übergabe: fbegin=Anfangsfarbe
          fend=Endfarbe
          fPos=Position im Verlauf
          fAnz=Schritte vom Verlauf
}

function farbverlauf(fbegin, fend: TColor; fPos, fAnz: Integer): TColor;
var r1,g1,b1,r2,g2,b2,r3,g3,b3: Byte; _fPos: Integer;
begin
 r1:=Byte(fbegin);
 g1:=Byte(fbegin shr 8);
 b1:=Byte(fbegin shr 16);
 r2:=Byte(fend);
 g2:=Byte(fend shr 8);
 b2:=Byte(fend shr 16);
 _fPos:=fAnz-fPos;
 r3:=Round((r1*_fPos+r2*fPos)/fAnz);
 g3:=Round((g1*_fPos+g2*fPos)/fAnz);
 b3:=Round((b1*_fPos+b2*fPos)/fAnz);
 result:=RGB(r3, g3,b3);
end;


zum Beispiel:
Wenn man folgende Farben angibt:
fbegin= $00DCEBFF
fend= $00222962
fAnz auf 8 setzt,
und fPos von 0 bis 8 zählen läßt erhält man folgendes Ergebnis:

$00DCEBFF
$00C4D2EB
$00ADBAD7
$0096A2C4
$007F8AB0
$0067719C
$00505989
$00394175
$00222962


Wie Ihr seht ist das eine Lineare Berechnung.
Wer's optimieren will kann es gerne tun, ansonsten 'save' :D

Ein Gruß
LM

Nachtrag: achso eine Fehlerabfrage ist nicht enthalten. evt. sollte man noch überprüfen ob fPos<=fAnz ist und >=0 ist, könnt ja mal testen was sonst rauskommt.

Moderiert von user profile iconTino: Code ist von user profile iconPhantom1.