gpt4 book ai didi

algorithm - 理解 HSL 到 RGB 色彩空间转换算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:53 25 4
gpt4 key购买 nike

我已经阅读了wikipedia 中的HSLRGB 算法。 .我理解它并且可以使用它进行转换。但是我遇到了另一种算法 here ,数学得到“解释”here .

算法是:

//H, S and L input range = 0 ÷ 1.0
//R, G and B output range = 0 ÷ 255

if ( S == 0 )
{

R = L * 255
G = L * 255
B = L * 255
}
else
{
if ( L < 0.5 ) var_2 = L * ( 1 + S )
else var_2 = ( L + S ) - ( S * L )

var_1 = 2 * L - var_2

R = 255 * Hue_2_RGB( var_1, var_2, H + ( 1 / 3 ) )
G = 255 * Hue_2_RGB( var_1, var_2, H )
B = 255 * Hue_2_RGB( var_1, var_2, H - ( 1 / 3 ) )
}

Hue_2_RGB( v1, v2, vH ) //Function Hue_2_RGB
{
if ( vH < 0 ) vH += 1
if( vH > 1 ) vH -= 1
if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
if ( ( 2 * vH ) < 1 ) return ( v2 )
if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6)
return ( v1 )
}

我试过按照数学计算,但我无法理解。它是如何工作的?

最佳答案

第一部分 if ( S == 0 ) 是针对没有饱和度的情况,这意味着它是灰色阴影。您设置亮度,将 RGB 设置为该灰度级别,然后就完成了。

如果不是这种情况,那么我们需要执行棘手的部分:

我们将使用var_1var_2 作为临时值,只是为了使代码更具可读性。

因此,如果亮度小于 0.5 (50%),则 var_2 = 亮度 x (1.0 + 饱和度。如果亮度等于或大于 0.5 (50%),则 var_2 = 亮度 + 饱和度 – 亮度 x 饱和度。那是其他部分:

if ( L < 0.5 ) var_2 = L * ( 1 + S )
else var_2 = ( L + S ) - ( S * L )

然后我们做:

var1 = 2 x Luminance – var_2

稍后会有用。

现在我们需要为每个颜色 channel 另外三个临时变量,就色调而言。对于红色,我们向其添加 0.333(代码中的 H + (1/3)),对于绿色,我们什么都不做,对于蓝色,我们从中减去 0.333(H + (1/3))。该临时值在 Hue_2_RGB() 中称为 vH(值 Hue)。

现在每个颜色 channel 将被单独处理,因此三个函数调用。有四个公式可以应用于颜色 channel 。每个颜色 channel 应该只“使用”一个公式。

哪一个?这取决于 Hue (vH) 的值。

顺便说一句,vH 的值必须归一化,因此如果它是负数我们加 1,或者如果它大于 1,我们从中减去 1,所以 vH 位于 [0 , 1].

  1. 如果 6 x vH 小于 1,颜色 channel = var_1 + (var_2– var_1) x 6 x vH
  2. 如果 2 x vH 小于 1,颜色 channel = var_2
  3. 如果 3 x vH 小于 2,颜色 channel = var_1 + (var_2 – var_1)x (0.666 – vH) x 6
  4. 否则,颜色 channel = var_1

对于 R = 255 * Hue_2_RGB( var_1, var_2, H + ( 1/3 ) ),颜色 channel 将是红色,在代码中命名为 R .

关于algorithm - 理解 HSL 到 RGB 色彩空间转换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com