【问题标题】:formula for alpha value when blending two transparent colors混合两种透明颜色时的 alpha 值公式
【发布时间】:2011-04-09 04:45:08
【问题描述】:

假设 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,好的,我将编辑我的帖子以使用从 0 到 1 的浮点数

标签: colors transparency alpha blending


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    float blend(float alphaBelow, float alphaAbove)
    {
        return alphaBelow + alphaAbove - alphaBelow * alphaAbove;
    }
    

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

    【讨论】:

    • 谢谢,这几乎是我想要的结果。只是当我在 Photoshop 中将结果与两张相互重叠的图像进行比较时,photoshop 版本的 alpha 值似乎要高一些。
    【解决方案3】:

    Photoshop 进行以下计算:

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

    【讨论】:

    • 如果两个输入都在 0..1 范围内,min 是多余的。
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多