如何将两种颜色与不同的alpha值组合在一起

时间:2015-03-06 14:12:39

标签: colors formula alpha color-blending

我有两种颜色,c 0和c 1。它们具有可变的α,红,绿和蓝值:(a 0,r 0,b 0,g 0)和(a 1,r 1,b 1,g 1)。我想知道是否有一个简单的公式来组合这些颜色以获得正确的新颜色(c 2)。

让我们说c 0覆盖c 1。我知道如果他们有相同的alpha值,那么平均他们比较的红色,绿色和蓝色值就可以了。但是当alpha值不同时,我注意到这并没有正常工作 - 似乎alpha决定了每种颜色的RGB值"贡献的水平"到最后的颜色。

另有说明,

If a₀=a₁ then:
    a₂=a₀=a₁,
    r₂=(r₀+r₁)/2,
    g₂=(g₀+g₁)/2,
    b₂=(b₀+b₁)/2
Else:
    a₂=(a₀+a₁)/2,
    r₂=?,
    g₂=?,
    b₂=?

1 个答案:

答案 0 :(得分:11)

简答:

如果我们想用c 1 覆盖c 0 ,那么两者都有一些alpha

a 01 =(1 - a 0 )·a 1 + a 0

r 01 =((1 - a 0 )·a 1 ·r 1 + a < sub> 0 ·r 0 )/ a 01

g 01 =((1 - a 0 )·a 1 ·g 1 + a < sub> 0 ·g 0 )/ a 01

b 01 =((1 - a 0 )·a 1 ·b 1 + a < sub> 0 ·b 0 )/ a 01

请注意,在颜色分量的公式中用 01 除。这很重要。

答案很长:

c 0 时的颜色基本公式用alpha a 0 覆盖opaque c 1

r 0 over 1 =(1 - a 0 )·r 1 + a 0 ·r <子> 0

//对于g&amp; b组件

因此,如果有另一种颜色c 2 并且c 1 实际上不是不透明但具有alpha a 1 我们可以覆盖第一个c 1 在c 2 上,然后c 0 在得到的颜色上。

r 1 over 2 =(1 - a 1 )·r 2 + a 1 ·r <子> 1

r 0 over(1 over 2) =(1 - a 0 )·((1 - a 1 )·r < sub> 2 + a 1 ·r 1 )+ a 0 ·r 0

如果我们有一个颜色c 01 ,它覆盖c 2 ,结果与覆盖第一个c 1 相同,然后c 0 就像这样:

r 01 over 2 =(1 - a 01 )·r 2 + a 01 ·r <子> 01

好的,让它们相等:

(1 - a 01 )·r 2 + a 01 ·r 01 =(1 - a 0 )·((1 - a 1 )·r 2 + a 1 ·r 1 )+ a 0 ·r 0 =(1 - a 0 )·(1 - a 1 )·r 2 +(1 - a 0 )a 1 ·r 1 + a 0 ·r 0

所以

1 - 01 =(1 - a 0 )·(1 - a 1 )= 1 - ((1 - a 0 )·a 1 + a 0

a 01 ·r 01 =(1 - a 0 )·a 1 ·r 1 + a 0 ·r 0