haskell – 将HSL转换为RBG

我正在尝试使用Data.Colour模块将一些HSL值转换为RBG. Hackage doc说Hue总是在0-360范围内.但现在有饱和度和亮度值的任何范围.它们是在[0,100]还是在[0,1]范围内?

我认为第一个变体是正确的,但似乎不是.

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

比我尝试使用范围[0,1]来饱和度和亮度.

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

这就是为什么我开始认为只有饱和度应该是[0,1]中的双精度.

例如,我们在HSL格式中有一些颜色值.

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

然后我们将其转换为RGB并截断所有值

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

但是(31,63,104):: RGB是(214,54,26):: HSL就像some online color-converters所说的那样.

我究竟做错了什么?

解决方法

看起来封装使用范围[0,1]来表示亮度和饱和度,但请注意,它也将此范围用于RGB值,而不是[0,255],如您所假设的那样.考虑到这一点,我得到(几乎)预期值:

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

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效