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

How are the blended colors computed in this case?

这是一个关于 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).

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

这里有什么问题?编辑是否使用不同的混合公式(然后是什么)?我是不是算错了?

首先,如果我创建像您这样的图像,我会得到最终颜色 (0, 0.863, 0, 0.59)。所以你可能想检查你的输入。

混合颜色有点棘手。您显示的公式 (C1 * (1 - A2) + C2 * A2) 是在纯色背景上混合颜色的公式。但是我们没有纯色背景。我们想要做的是找到一种混合颜色 (C, A),这样这种颜色混合在任何纯色背景颜色 CB 上产生的结果与首先在背景上混合 (C1, A1) 然后 [=20] 产生的结果相同=] 在生成的颜色上。我们可以用以下等式表示:

A * C + (1 - A) * CB = A2 * C2 + (1 - A2) * (A1 * C1 + (1 - A1) * CB)

经过一些re-arranging:

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.8470.866 的观察值仍然存在细微差异,但我认为这是一个舍入误差。

另请注意,GIMP 有两种合成模式。一种linear-RGB模式,一种感知模式。感知模式大概在 gamma-corrected space.

中执行混合