如何通过HSL颜色着色?

时间:2011-07-27 13:43:56

标签: colors hsl

我有一个复杂的问题,但可以通过这个小问题解决。我想制作一个按像素工作的着色器。

我为图片定义了基色(图片中有一些带有此颜色的像素和许多其他像素,这些像素接近此颜色):

Hex: #188DD9
HSL: 204° 80% 47%
RGB: 24 141 217

我知道目标基色

Hex: #23752E
HSL: 128° 54% 30%
RGB: 35 117 46

所以,我想为图像着色。

我的假设是,如果我在这两个HSL值中找到相关性,我可以 逐像素化我的图片。

目前我发现如果我用(目标色调 - 基色调)= -76移动基色调,色调就可以了。

你能指导我解决这个问题的饱和度和亮度之间的联系吗?

1 个答案:

答案 0 :(得分:2)

我认为,无论您最终使用哪种映射,您都希望将黑色映射为黑色,将白色映射为白色并将灰​​色映射为灰色。

添加剂映射

  

H'= H +(H target - H base

用于色调的

(用环绕式)确实可能没问题。对于饱和度,需要保留灰度值表示乘法映射

  

S'= S *(S target / S base ),

值超过100%饱和度被剪裁。但是,对于亮度,线性贴图不会这样做,因为您想要在调整中间值时同时修复0%和100%的亮度。一个自然的选择可能是gamma - 类型的地图,即

  

L'= pow(L,log(L target )/ log(L base ))= exp(log(L)* log(L target )/ log(L base ))。

其中亮度值被缩放到0到1之间。(注意:要为大量像素有效地计算此贴图,您可能需要预先计算一个查找表,例如256个条目。)

当然,你可以使用很多其他地图,但我会从这些地图开始,看看它们是否能提供足够好的结果。请注意,最终,结果的质量也可能受到HSL色彩空间的感知不均匀性的限制;有关详细信息,请参阅this Wikipedia page