2017-08-02 54 views
1

我有代码将RGB值转换为HSL值以及HSL转换为RGB。 它工作正常,但是,我有一个可以在rgb或hsl中工作的颜色选择器。 问题是,他们都使用整数值。因此,如果我将RGB转换为HSL,我得到的分数需要四舍五入。当我转换回RGB时,值与它们不同 - 数字通常为1(在RGB> HSL> RGB后,值123可能会变为124)。如何在来回转换时保持RGB和HSL整数值一致?

我觉得这很奇怪,因为在Photoshop中,它们具有相同的颜色选择器 - 您可以在RGB和HSB之间进行选择,并且当您来回转换时,RGB值保持一致,并且在您同时选择时使用整数值模式。 他们如何实现这一目标?

+0

我建议存储RGB *和* HSL值,加上一个标志来指示哪一个是活动的。否则一致性将不可能保持。 (例如,饱和度值为零,所有色调值都是相同的。) –

+0

是的,我正在这样做 - 但是,当我想切换选取器模式时会出现问题。值变化,因为分数变成了整数。我不想在选取器中指定分数。所以我想知道如何将这些分数隐藏起来,但仍然可以选择和转换为与过去一样的值。 Photoshop以某种方式做到这一点.. – user3591153

+1

如何在用户切换到HSL时继续使用RGB值,并且只有在用户在HSL对话框中移动颜色选择光标时才使用HSL值? –

回答

1

颜色空间的整数值不具有相同的大小。

HSL有黑色(亮度为零),加上白色(亮度为100),加上359 * 100 * 98其他颜色(因为色相零与色相360相同),从而产生3,518,202个整数三元组。

RGB具有256 * 256 * 256,或16777216个整数三元组,所以多个RGB值可以映射到相同的HSL值 - 在约4.7至配给1.

要改变选择器模式时你保持一致性可能需要在内部将HSL值保留为浮点值,但在选取器中显示整数值。将RGB值保持为内部浮点可能也有帮助。

我在颜色软件所看到的另一个问题是所获得从HSL至RGB转换到范围为0最接近的整数为255。我认为这是有问题的 RGB值,因为这意味着RGB值1到254包含范围的1/255,而零和255仅获得范围的1/255的一半。我首选的替代方法是将浮点RGB分量值映射到256到255(如果您愿意,可以为255.99999),并将结果颜色分量的整数底部。这样,0到255的整数分量值分别取得范围的(1/256)。

在一天结束时,如果您希望用户能够输入以前使用的HSL值并获得完全相同的颜色,则需要允许带有小数位的HSL值。