在这种情况下如何计算混合色?

时间:2019-06-17 20:54:15

标签: graphics colors alpha blending

这是有关alpha混合预期结果的问题。

这是设置: 背景色是透明的黑色(0、0、0、0.18)。 绘图颜色为半透明的绿色(0、1、0、0.5)。

这是图形编辑器(GIMP)中的结果:

colors

结果颜色为(0,0.93,0,0.59)。

如果我们将这些颜色与颜色混合公式C1 * (1 - A2) + C2 * A2混合并计算alpha A1 * (1 - A2) + A2,我们将得到(0,0.5,0,0.59)。

阿尔法是正确的,颜色是不正确的。输出颜色为灰绿色。在白色背景上这变得非常明显。

这是怎么了?编辑器是否使用不同的混合公式(那么它们是什么)?我的计算错误吗?

1 个答案:

答案 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模式和感知模式。知觉模式大概是在经过伽玛校正的空间中执行的。