Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colors 如何组合具有不同alpha值的两种颜色_Colors_Formula_Alpha_Color Blending - Fatal编程技术网

Colors 如何组合具有不同alpha值的两种颜色

Colors 如何组合具有不同alpha值的两种颜色,colors,formula,alpha,color-blending,Colors,Formula,Alpha,Color Blending,我有两种颜色,c₀ 和c₁. 它们具有可变的alpha、红色、绿色和蓝色值:₀, R₀, B₀, G₀) 及₁, R₁, B₁, G₁). 我想知道是否有一个简单的公式来组合这些颜色以获得正确的新颜色(c₂). 让我们假设c₀ 覆盖层c₁. 我知道如果它们的alpha值相等,那么平均它们的红色、绿色和蓝色的比较值就可以了。但是当alpha值不同时,我注意到这不能正常工作。似乎alpha决定了每种颜色的RGB值对最终颜色的“贡献”程度 除非另有说明 If a₀=a₁ then: a₂=a₀

我有两种颜色,c₀ 和c₁. 它们具有可变的alpha、红色、绿色和蓝色值:₀, R₀, B₀, G₀) 及₁, R₁, B₁, G₁). 我想知道是否有一个简单的公式来组合这些颜色以获得正确的新颜色(c₂).

让我们假设c₀ 覆盖层c₁. 我知道如果它们的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₂=?
简短答复:

如果我们想在c0和c1上叠加一些alpha,那么

a01=(1-a0)·a1+a0

r01=((1-a0)·a1·r1+a0·r0)/a01

g01=((1-a0)·a1·g1+a0·g0)/a01

b01=((1-a0)·a1·b1+a0·b0)/a01

注意,在颜色成分的公式中除以a01,这很重要

长答覆:

当c0覆盖不透明c1和alpha a0时,颜色的基本公式为

r0大于1=(1-a0)·r1+a0·r0

//g&b组件也是如此

因此,如果有另一种颜色c2和c1实际上不是不透明的,但有一个alpha a1,我们可以先将c1覆盖在c2上,然后将c0覆盖在结果颜色上

r1大于2=(1-a1)·r2+a1·r1

r0除以(1除以2)=(1-a0)·((1-a1)·r2+a1·r1)+a0·r0

如果我们有一个颜色c01,它覆盖c2,与覆盖第一个c1,然后再覆盖c0的结果相同,它会是这样的:

r01超过2=(1-a01)·r2+a01·r01

好的,让我们让他们相等:

(1-a01)·r2+a01·r01=(1-a0)·((1-a1)·r2+a1·r1)+a0·r0 =(1-a0)·(1-a1)·r2+(1-a0)·a1·r1+a0·r0

所以

1-a01=(1-a0)·(1-a1)=1-((1-a0)·a1+a0)


a01·r01=(1-a0)·a1·r1+a0·r0

我相信答案是非常好的,非常感谢!对于那些想要阅读更多内容的人,请参阅维基百科关于alpha合成的条目: