Hmm, sieht nicht gerade einfach aus. Letzten Endes habe ich eine (für mich) leichter verständliche Variante die den Farbverlauf berechnet.
Delphi-Quellcode:
//==============================================================================
// Farbe zwischen 2 vorgegebenen Farbwerten berechnen
//==============================================================================
function ColorBetween(C1, C2 : TColor; blend:Real):TColor;
var
r, g, b : Byte;
y1, y2 : Byte;
begin
C1 := ColorToRGB(C1);
C2 := ColorToRGB(C2);
y1 := GetRValue(C1);
y2 := GetRValue(C2);
r := Round(y1 + (y2-y1)*blend);
y1 := GetGValue(C1);
y2 := GetGValue(C2);
g := Round(y1 + (y2-y1)*blend);
y1 := GetBValue(C1);
y2 := GetBValue(C2);
b := Round(y1 + (y2-y1)*blend);
Result :=
RGB(r, g, b);
end;
//==============================================================================
// Farbe zwischen beliebig vielen vorgegebenen Farbwerten berechnen
//==============================================================================
function ColorsBetween(colors:
array of TColor; blend:Real):TColor;
var
a : Integer;
faktor : Real;
begin
if Length(colors) < 2
then
raise Exception.Create('
ColorsBetween() at least 2 Colors required');
if blend <= 0.0
then
Result := colors[0]
else if blend >= 1.0
then
Result := colors[High(colors)]
else
begin
a := Trunc(High(colors) * blend);
faktor := 1.0 / High(colors);
Result := ColorBetween(colors[a], colors[a+1], (blend-(a * faktor)) / faktor);
end;
end;
Diese Funktionen rufe ich dann für meinen Farbverlauf aus. Ich habe auch schon versucht mit dem Canvas einer Paintbox oder eines Images diesen Farbverlauf zu erzeugen, aber das klappt auch nicht.