haskell - 将 HSL 转换为 RGB

标签 haskell colors rgb hsl

我正在尝试使用 Data.Colour 模块将一些 HSL 值转换为 RBG 。 Hackage 文档说 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,0)
RGB {channelRed = 0, channelGreen = 0, channelBlue = 0}
it :: RGB Integer

这就是为什么我开始认为 [0,1] 中只有 Saturation 应该是 Double

例如,我们有一些 HSL 格式的颜色值。

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

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

λ> fmap truncate . (\(h,s,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}

关于haskell - 将 HSL 转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320205/

相关文章:

python - 为 matplotlib 图分配随机颜色

c++ - 更正 YUV422 到 RGB 的转换

php - 如何返回基于日期和随机的颜色值?

快速更改 GMSAutocompleteViewController 导航栏颜色

colors - gnuplot 背景颜色

iphone - 核心显卡RGB数据问题

haskell - 在 Haskell 中覆盖 fromInteger

haskell - 应用解析相对于单子(monad)解析有什么好处?

optimization - 是否有可能使 GHC 优化(砍伐)通用功能,例如变形?

haskell - 使用 GHC.Generics 派生默认实例