ДМИ*_*КОВ 4 hsl rgb haskell colors
我正在尝试将一些HSL值转换为RBGData.Colour模块.Hackage doc说,Hue总是在0-360范围内.但现在有任何范围Saturation和Lightness价值观.它们是在[0,100]还是在[0,1]范围内?
我认为第一个变体是正确的,但似乎不是.
?> hsl 100 50 50
RGB {channelRed = 866.6666666666692, channelGreen = -2400.0, channelBlue = 2500.0}
Run Code Online (Sandbox Code Playgroud)
比我尝试使用范围[0,1]来饱和度和亮度.
?> fmap truncate . (\(h,s,l) -> hsl h s l) $ (0,0,0)
RGB {channelRed = 0, channelGreen = 0, channelBlue = 0}
it :: RGB Integer
Run Code Online (Sandbox Code Playgroud)
这就是为什么我开始以为只Saturation应该是一个Double在[0,1].
例如,我们在HSL格式上有一些颜色值.
?> let c = (34.0,0.54,68.0)
c :: (Double, Double, Double)
Run Code Online (Sandbox Code Playgroud)
比我们将其转换为RGB并截断所有值
?> fmap truncate . (\(h,s,l) -> hsl h s l) $ c
RGB {channelRed = 31, channelGreen = 63, channelBlue = 104}
Run Code Online (Sandbox Code Playgroud)
不过(31,63,104)::RGB是(214,54,26)::HSL像一些在线颜色转换器说.
我究竟做错了什么?
它看起来像包使用[0, 1]亮度和饱和度的范围,但请注意它也使用此范围的RGB值,而不是[0, 255]你似乎假设.考虑到这一点,我得到(几乎)预期值:
> fmap (truncate . (* 255)) $ hsl 214 0.54 0.26
RGB {channelRed = 30, channelGreen = 61, channelBlue = 102}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |