L'objectif principal du modèle de couleur RVB (rouge vert bleu) est la détection, la représentation et l'affichage d'images dans des systèmes électroniques, tels que des téléviseurs et des ordinateurs
HSL (Hue Saturation Lightness) est un modèle de couleur alternatif, conçu dans les années 1970 par des chercheurs en infographie pour s'aligner plus étroitement avec la façon dont la vision humaine perçoit les attributs de couleur
Voici les articles wiki pour RGB et HSL . Il est courant que les programmes graphiques fassent les calculs en HSL, puis les convertissent au format préféré pour la plupart des écrans: RVB.
La tâche consiste à écrire une fonction / un programme qui prend HSL comme entrée et génère RVB.
Vous pouvez choisir votre représentation préférée pour les E / S, tant qu'elle est cohérente entre elles.
Par exemple, ils peuvent être un tableau / tuple avec 3 éléments ou un objet avec 3 propriétés nommées h
,s
et l
, mais je vais accepter d' autres variations intelligentes, comme la réception de la HSL comme un entier (perte de précision) et délivrer un entier rgb.
L'entrée peut être supposée sûre en termes de plage et de format, que vous pouvez tous deux décider. Je suggère fortement soit les gammes 0-1 0-1 0-1
ou 0-360 0-100 0-100
pour hsl, et 0-1 0-1 0-1
ou0-255 0-255 0-255
pour rgb.
Chaque réponse est requise pour spécifier les deux ci-dessus, et mettez différentes variations dans vos réponses si vous êtes particulièrement fier d'eux, même si elles n'ont pas moins de caractères que vos autres variantes. Mettez le plus petit sur le dessus.
Pseudo cas de test pour 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
Les formules de conversion peuvent être trouvées ici :
C'est une belle façon de visualiser la conversion:
la source
H
de0-360
est[0,360)
, serait - il mieux écrit0-359
?a-b
notation est mauvaise en soi lorsqu'il s'agit de valeurs non entières, mais je dirais que c'est correct de garder la question plus lisible. Si quelqu'un d'autre se plaint, je vais y repenser, alors merci de l'avoir signalé[0,360)
alors :)Réponses:
JavaScript (ES6),
989594 octetsPrend H en [0,360) et S / L en [0,1) . Sorties R , G et B sous forme de tableau de 3 flottants en [0,1) .
Cas de test
Cet extrait de code convertit les résultats en [0,255] .
Afficher l'extrait de code
Comment?
Code d'initialisation
Code principal
Permutations de (0, C, X)
La partie légèrement délicate consiste à générer la permutation correcte de (0, C, X) en fonction de l'angle de la composante de teinte. Comme le montre la figure suivante, chaque valeur de colonne est sélectionnée dans la même séquence de cycles de la période 6 , en commençant à différents décalages. Dans le code ci-dessus, nous utilisons - ~ H au lieu de seulement + H car nous devons contraindre H à un entier. D'où les décalages (5,3,1) au lieu de (0,4,2) .
la source
H
en charge[0,6)
et la sortie en[0,1]
économiseraient-elles quelques octets?Mathematica, 155 octets
Essayez-le en ligne!
la source
Hue
HSB (AKA HSV) et non HSL (voir les figures 2a et 2b sur la page Wikipédia liée).RGBColor
existe maisHSLColor
pas. > _>Python 2 , 32 octets
Essayez-le en ligne!
Cette fonctionnalité est en fait intégrée à Python via l'
hls_to_rgb
intérieur ducolorsys
bibliothèque. Le format des entrées de mine est une plage de 0 à 1 de HLS (au lieu de HSL, les deux sont des acronymes communs pour la même chose [bien que HSL soit plus courant]). Et le mien produit des valeurs RVB dans un tuple avec une plage de 0 à 1.Crédits
Merci à Jonathan Allan d'avoir souligné que je dois juste l'importer (et ensuite m'aider à réduire le nombre d'octets).
la source
from colorsys import hls_to_rgb
nous donne une fonction qui peut être réutilisée. Modifier - faites que 21 commefrom colorsys import*
.import colorsys
pour 15!C ++,
228221 octets-7 octets grâce à Zacharý
Les arguments sont tous deux des tableaux qui ont une taille minimale de 3 éléments (c'est
float hsl[3]
-à- dire etint rgb[3]
D'accord. Maintenant, comment ça marche? Quel est ce long tableau?
Eh bien, ce n'est pas un long tableau, c'est un
int
tableau. Blague à part, le tableau indique de combien de positions nous décalons à droite CX et 0 lorsque nous voulons sélectionner la permutation correcte, + 2. Vous vous souvenez comment R ', G' et B 'sont sélectionnés?Disons que nous avons un ordre "normal" qui est {C, X, 0}
Maintenant, lorsque la première permutation (c'est-à-dire {C, X, 0}) est sélectionnée, vous ne devez pas déplacer, ce qui est exactement la même chose que le décalage à droite de 0. Ainsi, les 3 premiers éléments du tableau sont 0,0 et 0
Pour la deuxième permutation ({X, C, 0}), nous devons décaler à droite C de 1 et décaler à gauche X de -1, de sorte que les quatrième, cinquième et sixième éléments du tableau sont 1, -1 et 0
Etc...
Dans le cas des 3ème et 4ème permutations, j'ai besoin de décaler à gauche le 0 par 2, donc à droite de -2. Puisqu'il y a plus de 2 nombres négatifs, j'ajoute plutôt 2 à chaque élément du tableau et soustrais 2 au moment de l'exécution (pour des raisons de golf, pour n'avoir que des nombres entiers dans le tableau).
la source
Python 2 ,
119112 octetsEssayez-le en ligne!
Prend l'entrée comme
H=[0,6[, S=[0,1], L=[0,1]
la source
HTML + JavaScript (ES6), 8 + 88 = 96 octets
Prend l'entrée comme un angle et deux pourcentages. J'évalue l'extrait HTML
<p id=p>
et la fonction de flèche JavaScript. Je ne sais pas ce que les navigateurs d'arrondi utilisent, donc mes réponses peuvent différer légèrement des vôtres.la source
Swift 4, 218 octets
Accepte les valeurs HSL dans la plage [0,1] comme arguments et renvoie un tableau contenant les valeurs RVB dans la même plage:
L'idée est de convertir d'abord l'entrée HSL en HSB, puis d'utiliser le constructeur HSB de l'objet couleur intégré dans Cocoa pour récupérer les valeurs RVB.
La version UIKit a exactement la même longueur, car les seuls remplacements sont:
Cocoa
→UIKit
NSColor
→UIColor
Non golfé:
L'extrait suivant peut être utilisé pour tester, en remplaçant simplement les valeurs
h
,s
etl
:Malheureusement, je ne peux pas fournir de lien vers un sandbox en ligne, car ils fonctionnent tous sous Linux, qui n'inclut pas Cocoa.
la source
GLSL (GL_ES)
160 144 134131 octetsLa teinte est dans la plage 0-6 (enregistre 3 octets)
Sat, light et rgb sont 0-1
Essayez-le sur le livre des shaders
Outil de sélection de couleurs utilisé sur un écran d'impression pour tester la sortie qui était correcte,
sauf une petite erreur sur 202 19 39 → 81 104 118, qui a donné 80 104 118
la source
R , 88 octets
Essayez-le en ligne!
Cette fonction prend en entrée les valeurs H, S et L en tant que valeurs de plage 0-1 et sort les valeurs RVB en tant que valeurs de plage 0-255. Il convertit la représentation HSL en une représentation HSV, puis utilise
hsv()
pour convertir la représentation HSV en une couleur R (c'est-à-dire une représentation hexadécimale - #rrggbb), puis utilisecol2rgb()
pour convertir la couleur R en valeurs RVB.la source
Gelée ,
3932 octets-1 grâce à caird coinheringaahing (
%2
est justeḂ
)-1 et / ou inspiration pour -4 grâce à caird coinheringaahing aussi!
Un programme complet prenant trois arguments de ligne de commande:
L
,H
,S
Dans les intervalles[0,1)
,[0,6)
et[0,1)
respectivementqui imprime une liste donnant le format RVB
[R, G, B]
avec chacune des trois valeurs de la plage[0,1]
Remarque:
H
peut également envelopper comme vous le[0,360)
feriez.Essayez-le en ligne!
Comment?
la source