2010-09-07 84 views
8

让我们假设alpha为1表示完全不透明,0表示完全透明。 可以说我有两个黑色的图像,其中有50%的透明度(alpha = 0.5)。混合两种透明颜色时alpha值的公式

如果它们彼此重叠,则产生的透明度为0.75,对不对?

如果他们的alpha值为0.25,结果会在0.5左右,对吗?

如果他们的alpha为0.9,结果会在0.97左右,对不对?

你怎么能得到这些数字?

换句话说,我正在寻找一个函数,从其他两个alpha值中获取得到的alpha值。

float alpha = f(float alphaBelow, float alphaAbove) 
{ 
    //TODO implement 
} 
+0

传统上,alpha = 1时颜色不透明,alpha = 0时颜色完全透明。因此,在50%上面放置50%的结果alpha应该是25%,而不是75%。 – kennytm 2010-09-07 12:54:40

+0

@KennyTM,好吧,我会编辑我的帖子,使用浮动从0到1 – clamp 2010-09-07 12:58:57

回答

6

这个答案是数学上Jason's answer一样的,但是这是实际的公式,你会在参考材料中找到它。

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

此函数假定这两个参数是0..1,其中0表示完全透明,1表示完全不透明。

+0

谢谢,这几乎就像我希望的结果。只是当我在Photoshop中比较两个图像的结果时,photoshop版本似乎具有更高的alpha值。 – clamp 2010-09-07 13:02:58

3

Photoshop中做如下计算:

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

如果两个输入都在0..1范围内,'min'是多余的。 – 2012-05-02 18:58:03