Ich mache eine kleine Sammlung von Typen / Funktionen in Bezug auf Gradienten für zukünftige Verwendung. Ich möchte sicherstellen, dass es mindestens zwei Verfahren gibt: ColorBetween und ColorsBetween. Ich möchte vielleicht nur ein Array von TColor zwischen zwei Farben (ColorsBetween), und ich muss auch nur einen Farbwert in Prozent zwischen zwei Farben (ColorBetween) wissen.
Ich habe es schon meistens unten gemacht. Außer, ich habe zwei Kernfragen:
[???]
habe) Hier ist der Code:
%Vor% BEARBEITEN: Percent: Integer
in Percent: Single
geändert, um einen glatteren Effekt zu erhalten - nicht auf 100 mögliche Werte beschränkt.
Es klingt wie du dein ??? ersetzen möchtest ??? mit
%Vor% Die EnsureRange
in Ihrem Code ist nicht notwendig, da diese Funktion Werte im Bereich von 0 bis 255 zurückgeben muss, vorausgesetzt, Percent
liegt im Bereich von 0 bis 100. Ich denke, ich würde EnsureRange
auf% co_de anwenden % (erzwinge den Bereich zwischen 0.0 und 100.0) und verwende dann den folgenden Code:
Ihre erste Funktion gibt ein Array zurück, dessen erste Farbe Percent
ist. Vielleicht wärst du damit besser:
Dies ergibt das gleiche Verhalten an beiden Enden des Arrays. Oder vielleicht möchten Sie sowohl ColorA
als auch ColorA
enthalten. Dann würden Sie verwenden:
Aber wenn Sie dies tun, denken Sie daran, dass Count größer als 1 sein muss, sonst werden Sie durch Null geteilt. Das funktioniert nicht !!
Machen Sie sich keine Sorgen um die Leistung. Der Code könnte ohne Zweifel etwas schneller gemacht werden, aber es wird sicherlich kein Flaschenhals sein. Sie werden diese Farben nehmen und mit ihnen zeichnen. Das wird erheblich mehr Ressourcen verbrauchen als diese einfachen Routinen.
Ein letzter Punkt. Die Interpolation im RGB-Raum sieht für das menschliche Auge nicht besonders glatt oder linear aus. Die Verwendung von Gleitkommawerten kann dieser Tatsache nicht entgehen. Für beste Ergebnisse beim Betrachten müssten Sie in einem anderen Farbraum interpolieren.
Ich weiß nicht, ob das der schnellste Weg ist, aber es funktioniert:
%Vor%