在这种情况下如何计算混合颜色?
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.847
。 0.866
的观察值仍然存在细微差异,但我认为这是一个舍入误差。
另请注意,GIMP 有两种合成模式。一种linear-RGB模式,一种感知模式。感知模式大概在 gamma-corrected space.
中执行混合
这是一个关于 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.847
。 0.866
的观察值仍然存在细微差异,但我认为这是一个舍入误差。
另请注意,GIMP 有两种合成模式。一种linear-RGB模式,一种感知模式。感知模式大概在 gamma-corrected space.
中执行混合