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:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| 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'
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 Tino: Code ist von Phantom1.