Frage

Mein Ziel mit diesem Algorithmus, an dem ich arbeite, ist es, einen Farbverlauf aus einigen bereitgestellten Farben auszugeben. Mit Farbverlauf meine ich den "Fade" -Effekt zwischen zwei Farben (Farbe A, Farbe B) zu erzeugen und jeden Farbwert ((R, G, B) Tupel) dazwischen zu speichern.

Wenn beispielsweise der gesamte schwarze A = (0,0,0) und der gesamte weiße B = (255,255,255) bereitgestellt werden, ergibt sich folgende Progression:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

Damit wir zuerst weiß werden und es sich allmählich in schwarz verwandelt. Mit Weiß und Schwarz ist das natürlich sehr einfach (erhöhen Sie den RGB-Wert 255-mal um einen Schritt pro Schritt). Aber was ist, wenn ich dieses Verfahren mit zwei beliebigen Farben wie A= (180,69,1) und B= (233,153,0) durchführen möchte?

WICHTIGER HINWEIS: Wenn es mit hexadezimaler (oder einer anderen Art von Farbnotation) einfacher wäre, dies zu erreichen, könnte ich auch damit arbeiten. Geben Sie einfach an, um welchen Typ es sich handelt (berücksichtigen Sie, dass ich an PIL (Python) arbeite Imaging Library), also wenn es damit kompatibel ist, geht es mir gut)

Natürlich muss es eine möglichst gleichmäßige Verteilung sein, der Verlauf muss homogen sein.

Ich muss diesen Algorithmus herausfinden, damit ich ihn in meinem Fraktalgenerator verwenden kann (Mandelbrot-Set, googeln Sie ihn, wenn Sie möchten). Daher ist es wichtig, dass der Verlauf so weich wie möglich ist und keine Schluckaufe auftreten.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Konvertieren Sie Ihre RGB-Koordinaten in HSL oder HSV und gehen Sie diese durch, wobei Sie unterwegs wieder in RGB konvertieren.

Andere Tipps

Ich würde die RGB-Werte nur unabhängig voneinander interpolieren.Siehe diesen Thread .

Ich empfehle die gleiche Frage wie Jim Clay, lese aber von oben .oder siehe Wikipedia bezüglich Interpolation .

Meine Antwort auf die SO-Frage mit dem Titel Bereichswerte zu Pseudofarbe Dies kann für Sie hilfreich sein, da es eine Möglichkeit zum Generieren eines bestimmten Farbverlaufs zeigt (der gebräuchliche Name dessen, was Sie als Farbverlauf bezeichnet haben).

Im Allgemeinen können Sie zwischen zwei beliebigen Farben in einem beliebigen Farbraum interpolieren, indem Sie die Differenz oder den Delta-Wert zwischen den Komponenten jeder Farbe berechnen und diese dann durch die Anzahl der Zwischenschritte dividieren, die erforderlich sind, um einen Bruchteil der Delta-Menge pro Komponente zu erhalten Nach jedem Schritt anwenden.

Ausgehend vom Wert jeder Komponente der ersten Farbe kann die entsprechende Bruchmenge immer wieder hinzugefügt werden, um jede Zwischenschrittfarbe zu bestimmen. Alternativ kann der diesem Ansatz inhärente Rechenfehler reduziert werden, indem stattdessen (step_number/total_steps) * fractional_delta zu den anfänglichen Farbkomponentenwerten der Ausgangsfarbe hinzugefügt wird

Ich glaube, das sagt @Jim Clay auch in seiner Antwort. Wenn Sie einen Beispielcode wünschen, geben Sie dies in einem Kommentar an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top