Interpolieren von einer Farbe zu einer anderen
Ich versuche zu bekommen eine interpolation von einer Farbe zu einem anderen Farbton der gleichen Farbe. (zB: Himmel blau zu dunkelblau und dann wieder zurück).
Stolperte ich über einige code, die verwendet werden könnte, wenn der Bereich war von 0 bis 255 oder 0-1. Allerdings, in meinem Fall, ich habe die RGB-codes für die Color1 und Color2, und wollen, dass die rotation zu kommen.
Farbe 1: 151,206,255
Farbe 2: 114,127,157
Irgendwelche Ideen, wie man über diese?
- Normalerweise würde man die interpolation in einem anderen Farbraum, z.B. HSV, und konvertieren der interpolierten HSV Werte wieder in RGB.
- Ihre Farb-codes zu sein scheint, RGB...
- Warum ist, dass wir nicht im RGB-Farbraum verwendet in der interpolation?
- Dies sind die RGB-in Tat und ich dachte, die interpolation im RGB-Bedingungen. Wusste nicht, über HSV-Zeug ;/
- Der HSV-Farbraum entspricht viel stärker der Farbe, wie es vom Menschen wahrgenommen - wenn Sie möchten, eine "Natürliche" interpolation zwischen zwei Farben, die Sie wollen daher verwenden Sie einen Farbraum, der variiert in geeigneter Weise - z.B. wenn Sie nicht wollen, dass die wahrgenommene Helligkeit zu ändern, wie Sie interpolieren.
- Selbstverständlich können Sie die Interpolation im RGB -, Sie dürfen nur komische Farben dazwischen. Es kann Arbeit in Ihrem Fall, tatsächlich.
- Hast du dein problem gelöst ? Wenn dem so ist, bitte akzeptieren Sie die Antwort. Sonst, sollte man einen Kommentar, der sagt, was ist noch ein Hindernis.
- der HSV-Raum nicht konstant wahrgenommene Helligkeit. Eine Farbe, die mit gelben Farbton erscheint viel heller, als die Farbe mit einem blauen Farbton, wenn die Sättigung ist hoch, und V ist die gleiche.
- Was schlagen Sie stattdessen dann?
- viele Menschen nutzen CIELab-Raum. Aber meine wichtigste Punkt war, um sicherzustellen, dass niemand hatte die illusion, dass der HSV war ein Wahrnehmungs-Farbraum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Empfehle ich Ihnen konvertieren RGB nach HSV, dann passen Sie seine Komponenten, dann zurück konvertieren in RGB.
Wikipedia hat einen Artikel über es, und es ist diskutiert worden, die hier vor:
HSL zu RGB-Farbkonvertierung
Algorithmus zum konvertieren von RGB zu HSV und HSV zu RGB Bereich 0-255 für beide
Auch viele Rahmenbedingungen haben Konvertierungs-Funktionen, zum Beispiel Qt hat Klasse QColor.
Aber die Frage war über die tatsächliche interpolation... hier ist eine trivial-interpolation-Funktion:
So nennen, dass für alle Farbkomponenten, die Sie interpolieren, in einer Schleife. Mit RGB-interpolation, müssen Sie interpolieren jede Komponente in einem anderen Farbraum, den Sie möglicherweise brauchen, um zu interpolieren, nur ein.
Ich weiß, das ist bisschen alt, aber würdig ist, wenn jemand ist auf der Suche nach es.
Erste von allen, die Sie tun können-interpolation in einer beliebigen Farbe-Raum, einschließlich RGB -, die, meiner Meinung nach, ist eine der einfachsten.
Nehmen wir an, die variation gesteuert wird, indem ein Bruchteil Wert zwischen 0 und 1 (z.B. 0.3), wobei 0 bedeutet, dass die volle color1 und 1 bedeutet volle color2.
Theorie:
Anwendung:
Als RGB 3-Kanäle (rot, grün und blau) wir haben zur Erfüllung dieser Mathe für jeden der Kanäle.
Mit Ihrem Beispiel Farben:
So einfach ist das!
Konvertieren Sie Ihre RGB-Farben zu HSV dann interpolieren jede Komponente (nicht nur die Farbe, siehe am Ende der Antwort), danach können Sie wieder zurück konvertieren nach RGB.
Können Sie tun RGB-interpolation, aber die Ergebnisse sind besser mit dem HSV, weil in diesem Raum die Farbe ist getrennt von Luminanz und der Sättigung (Wikipedia-Artikel über den HSV). HSV-interpolation ist mehr "logisch" als das RGB eines, weil mit den letzteren können Sie zusätzliche Farben, während der Interpolation.
Code für die interpolation:
linear()
HSV-interpolation dargestellt wird, manchmal fügen Sie eine Reihe von Farben, da Sie nicht berücksichtigen, dass der Farbton ist zyklisch. Das geht von rot (bei 0 Grad) bis Violett (300) erzeugen orange, gelb, grün, blau--fast das ganze Spektrum-als würden Sie sich wahrscheinlich normalisieren wollen und nehmen Sie die kürzere route durch Violett.Den besten Farbraum für visuelle Effekte ist HCL. Dies ist ein Raum speziell erstellt, um gut auszusehen, während Sie Durchlaufen wird seine dimension, wo "gut Aussehen" bezieht sich nicht auf irgendwelche physikalischen Eigenschaften des Lichts oder der Farbe, wie RGB und CMYK jeweils.
Verwendung von HCL ist teuer, also das beste, was zu tun ist, erstellen Sie eine Reihe von vermittelnden Werte in diesem Raum und dann eine Interpolation im RGB-was ist heimisch. Dies ist, was ich getan habe in meinem Animations-engine.
Hier ist ein Ausschnitt von Ihr, in der Swift-4.0
Sowohl der Motor und das Beispiel oben mit HandyUIKit für die Konvertierungen zwischen Leerzeichen, so fügen Sie bitte dieses Projekt, was auch immer Sie erstellen den code oben zu arbeiten.
Habe ich geschrieben Artikel darüber.
Ich sehen, dass Sie markiert haben diese Frage unter "openframeworks" - tag.
so alle Sie tun müssen ist, verwenden Sie die Methode
ofColor::getLerped
oderofColor::lerp
getLerped
gibt neuen Wert, währendlerp
ändert die Farbe.Beispiel:
oder
Habe ich angepasst Synxis ist C Beispiel (oben) in eine ausführbare JavaScript-Programm.
Das Programm interpoliert die Farbe gelb, von rot und grün. Die input-und output ist im RGB-Raum, aber die interpolation erfolgt auf der HSV-Raum. Ich habe auch ein RGB-interpolation, Beispiel. Wie Sie unten sehen können, eine dunkel-gelb produziert wird, wenn Sie interpolieren rot und grün in RGB-Raum.
JS:
Hier ist ein Swift-2-version basiert auf dem @hyde ' s Antwort:
Können Sie es verwenden, wie diese:
Wo
t
ist der Anteil (0-1) der interpolation.