Schnellste Möglichkeit, Farben für einen Farbverlauf zu berechnen?

8

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:

  1. Wie berechne ich die Zwischenfarbe jedes RGB-Kanals mit einem bestimmten Prozentsatz? (Siehe unten, wo ich [???] habe)
  2. Was ist die schnellste Methode, um das zu erreichen, was ich mache (während ich die zwei verschiedenen Funktionen behalte)?

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.

    
Jerry Dodge 24.11.2011, 06:30
quelle

2 Antworten

7

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:

%Vor%

Ihre erste Funktion gibt ein Array zurück, dessen erste Farbe Percent ist. Vielleicht wärst du damit besser:

%Vor%

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:

%Vor%

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.

    
David Heffernan 24.11.2011, 07:21
quelle
4

Ich weiß nicht, ob das der schnellste Weg ist, aber es funktioniert:

%Vor%     
Svein Bringsli 24.11.2011 07:32
quelle