当混合两种透明颜色时,alpha值的公式是什么?

13
假设alpha为1表示完全不透明,0表示完全透明。 假设我有两张黑色图片,它们的透明度为50%(alpha = 0.5)。
如果它们叠放在一起,结果的透明度是0.75,对吗?
如果它们的alpha值为0.25,则结果约为0.5,对吗?
如果它们的alpha值为0.9,则结果约为0.97,对吗?
如何得出这些数字?
换句话说,我正在寻找一个函数,从另外两个alpha值中获取结果alpha值。
float alpha = f(float alphaBelow, float alphaAbove)
{
     //TODO implement
}

传统上,当 alpha = 1 时,颜色是不透明的,而当 alpha = 0 时,颜色是完全透明的。因此,在将50%放在50%之上时,得到的 alpha 应该是25%,而不是75%。 - kennytm
@KennyTM,好的,我会编辑我的帖子,使其适用于从0到1的浮点数。 - clamp
3个回答

10

这个答案在数学上与Jason的答案相同,但这是您在参考资料中找到的实际公式。

float blend(float alphaBelow, float alphaAbove) 
{ 
    return alphaBelow + (1.0 - alphaBelow) * alphaAbove; 
} 

9
float blend(float alphaBelow, float alphaAbove)
{
    return alphaBelow + alphaAbove - alphaBelow * alphaAbove;
}

该函数假设两个参数均为0..1,其中0为完全透明,1为完全不透明。


谢谢,这几乎是我想要的结果。只是当我在Photoshop中将两个相同图像叠加比较时,Photoshop版本的alpha值似乎略高。 - clamp

4
Photoshop进行以下计算:
float blend(float alphaBelow, float alphaAbove)
{
    return min(1,alphaBelow+(1-alphaBelow)*alphaAbove);
}

1
如果两个输入都在0..1范围内,则“min”是多余的。 - Roman Starkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接