【发布时间】:2019-04-17 06:32:14
【问题描述】:
我正在从原始像素数据创建 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 度纹理。所以我宁愿只创建渐变并在色调上叠加渐变。
【问题讨论】:
-
HSL 与不透明度无关。 Alpha 始终是第 4 个独立通道,无论是 RGBA 还是 HSLA
-
您还可以通过将白色纹理乘以所需颜色来从单个纹理生成任何色调。
-
要以这种方式使用 alpha,请尝试根据 R0、G0、B0(指定色调的完全饱和颜色)写出 R、G、B 的线性方程,将它们代入alpha 混合公式,并求解 A。
-
但我仍然会使用乘法将色调应用于灰度纹理。
-
不确定,但似乎您误解了正确的图像...对我来说,alpha 与其他值无关,您的垂直 alpha 分量逐渐从 1 变为 0,并且独立的水平饱和度/亮度分级跨度>