HSL转换是否精确?

3

我还没有找到一种算法/实现能够将 rgb(0, 96, 255) 转换为 HSL 并且再转回来,而不会得到稍微不同的值 (rgb(0, 98, 255))。这意味着每个人的算法都是错误的(包括 Wolfram|Alpha)——或者说 HSL 不能表示每个 RGB 颜色。

哪一个是正确的?


问题很可能在于转换需要浮点运算,使用浮点数无法得到精确的结果。 - Shahbaz
6
HSL 可以表示每一种 RGB 颜色,但是四舍五入为最接近的整数后的 HSL 不能表示所有 RGB 颜色。 - n. m.
1个回答

1

n.m. 是正确的——“HSL 可以表示每个 RGB 颜色,但四舍五入到最近整数的 HSL 不能。”

我最终在编写颜色类时所做的是将颜色内部存储为未舍入的 HSL。然后 RGB 和 HSL 的 getter 方法只在调用时进行舍入。这使得可以对 RGB 颜色进行诸如更改色相和饱和度之类的操作,而不会得到不准确的转换。

仍然没有办法准确地将舍入的 RGB 和舍入的 HSL 进行转换,因此解决方案就是永远不要将舍入的 RGB 转换为/从舍入的 HSL。


你在10多年前的回答中提到的最后一句话让我终于恍然大悟,非常感谢。 - diopside

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接