我还没有找到一种算法/实现能够将 rgb(0, 96, 255)
转换为 HSL 并且再转回来,而不会得到稍微不同的值 (rgb(0, 98, 255)
)。这意味着每个人的算法都是错误的(包括 Wolfram|Alpha)——或者说 HSL 不能表示每个 RGB 颜色。
哪一个是正确的?
n.m. 是正确的——“HSL 可以表示每个 RGB 颜色,但四舍五入到最近整数的 HSL 不能。”
我最终在编写颜色类时所做的是将颜色内部存储为未舍入的 HSL。然后 RGB 和 HSL 的 getter 方法只在调用时进行舍入。这使得可以对 RGB 颜色进行诸如更改色相和饱和度之类的操作,而不会得到不准确的转换。
仍然没有办法准确地将舍入的 RGB 和舍入的 HSL 进行转换,因此解决方案就是永远不要将舍入的 RGB 转换为/从舍入的 HSL。