Der Hauptzweck des RGB-Farbmodells (Rot, Grün, Blau) besteht in der Erfassung, Darstellung und Anzeige von Bildern in elektronischen Systemen wie Fernsehgeräten und Computern
HSL (Hue Saturation Lightness) ist ein alternatives Farbmodell, das in den 1970er Jahren von Computergrafik-Forschern entwickelt wurde, um die Wahrnehmung von Farbmerkmalen durch das menschliche Sehvermögen genauer abzustimmen
Hier sind die Wiki-Artikel für RGB und HSL . Es ist üblich, dass Grafikprogramme die Berechnungen in HSL ausführen und später in das bevorzugte Format für die meisten Bildschirme konvertieren: RGB.
Die Aufgabe besteht darin, eine Funktion / ein Programm zu schreiben, die / das HSL als Eingabe und Ausgabe von RGB verwendet.
Sie können Ihre bevorzugte Darstellung für die E / A auswählen, sofern diese übereinstimmt.
Zum Beispiel kann sie ein Array / Tupels mit 3 Elementen oder ein Objekt mit 3 Eigenschaften genannt werden h
, s
und l
, aber ich werde andere geschickte Variationen annehmen, wie die HSL als ganzzahliges Empfangen (Verlust precision) und zur Ausgabe einer RGB - Ganzzahl.
Es kann davon ausgegangen werden, dass die Eingabe in Bereich und Format sicher ist. Sie können beide entscheiden. Ich empfehle dringend entweder die Bereiche 0-1 0-1 0-1
oder 0-360 0-100 0-100
für hsl und 0-1 0-1 0-1
oder 0-255 0-255 0-255
für rgb.
In jeder Antwort müssen beide oben genannten Punkte angegeben werden. Wenn Sie besonders stolz auf sie sind, können Sie Ihre Antworten mit verschiedenen Variationen versehen, auch wenn sie nicht weniger Zeichen enthalten als Ihre anderen Variationen. Legen Sie die kleinste auf.
Pseudo-Testfälle für 0-360 0-100 0-100
→0-255 0-255 0-255
h s l → r g b
0 0 0 → 0 0 0
90 56 17 → 43 68 19
202 19 39 → 81 104 118
72 55 26 → 88 103 30
Die Formeln zur Umrechnung finden Sie hier :
Dies ist eine gute Möglichkeit, die Konvertierung zu visualisieren:
quelle
H
von0-360
ist[0,360)
, wäre es als besser geschrieben werden0-359
?a-b
Notation an sich falsch, wenn es sich um nicht ganzzahlige Werte handelt, aber ich würde sagen, dass es in Ordnung ist, die Frage besser lesbar zu halten. Wenn sich jemand beschwert, werde ich es überdenken.[0,360)
damals :)Antworten:
JavaScript (ES6),
989594 ByteNimmt H in [0,360) und S / L in [0,1) . Die Ausgänge R , G und B als Array von 3 floaten in [0,1] .
Testfälle
Dieses Snippet konvertiert die Ergebnisse zurück in [0,255] .
Code-Snippet anzeigen
Wie?
Initialisierungscode
Haupt code
Permutationen von (0, C, X)
Der etwas knifflige Teil besteht darin, die richtige Permutation von (0, C, X) entsprechend dem Winkel der Farbtonkomponente zu erzeugen . Wie in der folgenden Abbildung gezeigt, wird jeder Spaltenwert aus derselben Zyklussequenz von Periode 6 ausgewählt , beginnend mit unterschiedlichen Offsets. Im obigen Code verwenden wir - ~ H anstelle von nur + H, weil wir H zu einer ganzen Zahl zwingen müssen . Daher die Offsets (5,3,1) anstelle von (0,4,2) .
quelle
H
in[0,6)
und bei der Ausgabe[0,1]
speichern einige Bytes?Mathematica, 155 Bytes
Probieren Sie es online!
quelle
Hue
HSB (AKA HSV) nicht HSL ist (siehe Abbildungen 2a und 2b auf der verlinkten Wikipedia-Seite).RGBColor
existiert,HSLColor
aber nicht. > _>Python 2 , 32 Bytes
Probieren Sie es online!
Diese Funktionalität ist tatsächlich über das
hls_to_rgb
Innere dercolorsys
Bibliothek in Python integriert . Das Format für Mineneingaben ist ein HLS-Bereich von 0 bis 1 (anstelle von HSL sind beide gebräuchliche Akronyme für dasselbe Thema (obwohl HSL häufiger vorkommt)). Und meins gibt RGB-Werte in einem Tupel mit einem Bereich von 0 bis 1 aus.Credits
Vielen Dank an Jonathan Allan, der darauf hingewiesen hat, dass ich es nur importieren muss (und mir dann dabei helfen kann, die Anzahl der Bytes weiter zu reduzieren).
quelle
from colorsys import hls_to_rgb
da gibt uns eine Funktion, die wiederverwendet werden kann. Bearbeiten - machen Sie diese 21 alsfrom colorsys import*
.import colorsys
für 15!C ++,
228221 Bytes-7 Bytes dank Zacharý
Die Argumente sind beide Arrays mit einer Mindestgröße von 3 Elementen (dh
float hsl[3]
undint rgb[3]
Okay. Nun, wie funktioniert das? Was ist das für eine lange Reihe?
Nun, es ist kein langes Array, es ist ein
int
Array. Abgesehen von Scherzen zeigt das Array an, um wie viele Positionen wir CX und 0 nach rechts verschieben, wenn wir die richtige Permutation auswählen möchten. + 2. Erinnern Sie sich, wie R ', G' und B 'ausgewählt sind?Nehmen wir an, wir haben eine "normale" Reihenfolge, die {C, X, 0} ist.
Wenn Sie nun die erste Permutation (dh {C, X, 0}) auswählen, müssen Sie nicht verschieben. Dies entspricht genau der Verschiebung um 0 nach rechts. Die ersten drei Elemente des Arrays sind also 0,0 und 0
Für die zweite Permutation ({X, C, 0}) müssen wir C um 1 nach rechts und X um -1 nach links verschieben, sodass das vierte, fünfte und sechste Element des Arrays 1, -1 und 0 ist
Und so weiter...
Bei der 3. und 4. Permutation muss ich die 0 um 2 nach links verschieben, also die Rechtsverschiebung um -2. Da es mehr als 2 negative Zahlen gibt, addiere ich eher 2 zu jedem Element im Array und subtrahiere 2 zur Laufzeit (aus Golfgründen, um nur ganze Zahlen im Array zu haben).
quelle
Python 2 ,
119112 BytesProbieren Sie es online!
Übernimmt die Eingabe als
H=[0,6[, S=[0,1], L=[0,1]
quelle
HTML + JavaScript (ES6), 8 + 88 = 96 Byte
Nimmt die Eingabe als Winkel und zwei Prozent. Ich bewerte das HTML-Snippet
<p id=p>
und die JavaScript-Pfeilfunktion. Ich weiß nicht, welche Rundungsbrowser verwendet werden, daher können meine Antworten geringfügig von Ihren abweichen.quelle
Schnelle 4, 218 Bytes
Akzeptiert HSL-Werte im Bereich [0,1] als Argumente und gibt ein Array zurück, das die RGB-Werte im gleichen Bereich enthält:
Die Idee ist, zuerst die Eingabe von HSL in HSB zu konvertieren und dann den HSB-Konstruktor des integrierten Farbobjekts in Cocoa zu verwenden, um die RGB-Werte abzurufen.
Die UIKit-Version hat genau die gleiche Länge, da die einzigen Ersetzungen sind:
Cocoa
→UIKit
NSColor
→UIColor
Ungolfed:
Der folgende Ausschnitt kann zum Testen verwendet werden, indem nur die Werte zu ersetzen
h
,s
undl
:Leider kann ich keinen Link zu einer Online-Sandbox bereitstellen, da alle unter Linux laufen, das Cocoa nicht enthält.
quelle
GLSL (GL_ES)
160 144 134131 BytesDer Farbton liegt im Bereich von
0 bis 6 (spart 3 Byte). Sat, Light und RGB sind 0 bis 1
Probieren Sie es auf Buch der Shader
Verwendete das Colorpicker-Tool auf einem Druckbildschirm, um die korrekte Ausgabe zu testen, mit
Ausnahme eines kleinen Fehlers auf 202 19 39 → 81 104 118, der 80 104 118 ergab
quelle
R 88 Bytes
Probieren Sie es online!
Diese Funktion nimmt als Eingabe die H-, S- und L-Werte als 0-1-Bereichswerte und gibt die RGB-Werte als 0-255-Bereichswerte aus. Es konvertiert die HSL-Darstellung in eine HSV-Darstellung,
hsv()
konvertiert dann die HSV-Darstellung in eine R-Farbe (dh hexadezimale Darstellung - #rrggbb) undcol2rgb()
konvertiert dann die R-Farbe in RGB-Werte.quelle
Jelly ,
3932 Bytes-1 dank caird coinheringaahing (
%2
is justḂ
)-1 und / oder inspiration für -4 dank caird coinheringaahing auch!
Ein vollständiges Programm mit drei Befehlszeilenargumenten:
L
,H
,S
In den Bereichen[0,1)
,[0,6)
und[0,1)
jeweilsDies druckt eine Liste mit dem RGB-Format
[R, G, B]
mit jedem der drei Werte im Bereich[0,1]
Hinweis:
H
Kann auch wie gewünscht gewickelt werden[0,360)
.Probieren Sie es online!
Wie?
quelle