Question

Je suis en train de convertir une valeur de HSL à RBG avec le module Data.Colour. Hackage doc a dit que Hue est toujours dans la gamme 0-360. Mais il y a maintenant des gammes de valeurs Saturation et Lightness. Sont-ils en [0100] ou dans [0,1] gammes?

Je suppose que la première variante est juste, mais il semble que ce n'est pas.

λ> hsl 100 50 50
RGB {channelRed = 866.6666666666692, channelGreen = -2400.0, channelBlue = 2500.0}

Que j'ai essayé d'utiliser la gamme [0, 1] pour les saturation et la luminosité.

λ> fmap truncate . (\(h,s,l) -> hsl h s l) $ (0,0,0)
RGB {channelRed = 0, channelGreen = 0, channelBlue = 0}
it :: RGB Integer

Ce pourquoi je suis commencer à penser que seul Saturation devrait être un Double dans [0,1].

Par exemple, nous avons une valeur de couleur au format HSL.

λ> let c = (34.0,0.54,68.0)
c :: (Double, Double, Double)

Que nous convertir à RGB et tronque toutes les valeurs

λ> fmap truncate . (\(h,s,l) -> hsl h s l) $ c
RGB {channelRed = 31, channelGreen = 63, channelBlue = 104}

Mais (31,63,104)::RGB est (214,54,26)::HSL comme certains convertisseurs couleur-ligne dit.

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Il semble que le package utilise la [0, 1] de gamme pour la légèreté et la saturation, mais notez qu'il utilise également cette plage pour les valeurs RVB, et non [0, 255] que vous semblez assumer. En prenant cela en compte, je reçois (presque) les valeurs attendues:

> fmap (truncate . (* 255)) $ hsl 214 0.54 0.26
RGB {channelRed = 30, channelGreen = 61, channelBlue = 102}

Autres conseils

Alors finalement j'ai compris que les deux Saturation et la valeur Lightness devrait être dans l'intervalle [0,1].

λ> fmap (round . (255*)). (\(h,s,l) -> hsl h s l) $ (34.0,0.54,0.68)
RGB {channelRed = 217, channelGreen = 179, channelBlue = 129}
it :: RGB Integer

Il est un sens, parce que la valeur de (217,179,129)::RGB est égale à (34,54,68)::HSL.

Alors, il serait peut-être utile d'ajouter que dans les docs contraintes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top