这是有关alpha混合预期结果的问题。
这是设置: 背景色是透明的黑色(0、0、0、0.18)。 绘图颜色为半透明的绿色(0、1、0、0.5)。
这是图形编辑器(GIMP)中的结果:
结果颜色为(0,0.93,0,0.59)。
如果我们将这些颜色与颜色混合公式C1 * (1 - A2) + C2 * A2
混合并计算alpha A1 * (1 - A2) + A2
,我们将得到(0,0.5,0,0.59)。
阿尔法是正确的,颜色是不正确的。输出颜色为灰绿色。在白色背景上这变得非常明显。
这是怎么了?编辑器是否使用不同的混合公式(那么它们是什么)?我的计算错误吗?
答案 0 :(得分:1)
首先,如果我创建像您一样的图像,则会得到最终的颜色(0, 0.863, 0, 0.59)
。因此,您可能需要检查您的输入。
混合颜色有点棘手。您显示的公式(C1 * (1 - A2) + C2 * A2
)是将颜色混合在纯背景颜色上的公式。但是我们没有纯色的背景色。我们想要做的是找到一种混合色(C, A)
,这样,在任何纯色背景颜色CB
上混合的颜色所产生的结果与先在背景上混合(C1, A1)
然后在{{1 }}。我们可以用以下等式表达这一点:
(C2, A2)
重新安排后:
A * C + (1 - A) * CB = A2 * C2 + (1 - A2) * (A1 * C1 + (1 - A1) * CB)
由此可见,A * C - A * CB = A2 * C2 + A1 * C1 - A2 * A1 * C1 + (A1 * A2 - A1 - A2) * CB
的两个因素必须在两个方面都匹配,即
CB
因此
- A = A1 * A2 - A1 - A2
颜色等于
A = A1 + A2 - A1 * A2
在这种情况下,其计算结果为A * C = A2 * C2 + A1 * C1 - A2 * A1 * C1
C = (A2 * C2 + A1 * C1 - A2 * A1 * C1) / A
。 0.847
的观测值仍然略有差异,但是我认为这是舍入误差。
还要注意GIMP有两种合成模式。线性RGB模式和感知模式。知觉模式大概是在经过伽玛校正的空间中执行的。