我正在从原始像素数据创建HSL渐变,忽略色调我应该如何根据饱和度和亮度确定不透明度。
还要记住,这有点是一种视错觉,蓝色在图像中,它实际上变得更加透明(基本上是渐变下方有蓝色矩形的渐变)。
double saturation = pixel.x / image.width,
luminosity = 1.0 - ( pixel.y / image.height );
double alpha_channel = 255.0 * ( 1.0 - ( ( luminosity ) * ( saturation ) ) );
// Luminosity Channel to fade from white to black.
double luminosity_amount = 255.0 * ( luminosity );
// Set the pixels Red / Green / Blue Alpha
pixel.color = color( luminosity_amount , alpha_channel );
结果版本:
正确版本:
.
它变得不那么饱向于右中间。这意味着位图的不透明度更大。
如果有人能够提出一种能够正确淡化alpha通道的饱和度和光度的算法,那就太棒了。
我之所以这样做也是因为我不需要为360度的色调创建360度纹理。所以我宁愿创建渐变并在渐变上层叠渐变。
如果我理解正确,你需要一个带有alpha的灰度位图,你可以在任何纯色上构图。
轻松完成。想象一下,例如,下面的颜色是红色。然后,您可以计算每个像素所需的颜色。有多种方法可以做到这一点,但您的“正确位图”看起来像这样:
TARGET = lum *(白色*(1-sat)+ RED * sat)
TARGET = WHITE * lum *(1-sat)+ RED * lum * sat
您希望RED组件由透明度提供,而WHITE组件由位图灰色提供:
TARGET = WHITE * gray_level / 255 * alpha / 255 + RED *(1-alpha / 255)
看起来你的alpha部分是正确的:
1-alpha / 255 = lum * sat
alpha =(1 - (lum * sat))* 255
但是,你的灰度级错误:
gray_level / 255 * alpha / 255 = lum *(1-sat)
gray_level = 255 *(lum - (lum * sat))/(1 - (lum * sat))
当lum * sat非常接近1时,要注意除法中的不稳定性。