Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。
去年关闭。
Improve this question
我正在根据原始像素数据创建HSL渐变,而忽略了如何根据饱和度和亮度确定不透明度。
还要记住,这有点像错觉,蓝色在图像中,实际上变得越来越透明(本质上是一个渐变,渐变下方有一个蓝色矩形)。
结果版本:
正确版本:
。
它向右中间变不那么饱和。意味着位图的不透明度在那里更大。
如果有人能提出一种算法,该算法可以使饱和度和发光度正确地淡化alpha通道,那就太了不起了。
另外,这样做的原因是,我不需要为360度色相创建360纹理。因此,我宁愿只创建渐变并将渐变叠加在色调上。
想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。
去年关闭。
Improve this question
我正在根据原始像素数据创建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 =白色* lum *(1-sat)+ RED * lum * sat
您希望由透明性提供RED组件,由位图灰色提供WHITE组件:
目标=白色* grey_level / 255 * alpha / 255 +红色*(1-alpha / 255)
看起来您的Alpha部分正确:
1-alpha / 255 = lum *饱和
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时,请小心除法中的不稳定性。
关于c++ - 位图算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55721267/
10-09 13:32