Language agnostic &引用;“50%蓝色加100%红色”;vs";50%红色加100%蓝色“;

Language agnostic &引用;“50%蓝色加100%红色”;vs";50%红色加100%蓝色“;,language-agnostic,colors,transparency,Language Agnostic,Colors,Transparency,假设我们有两种ARGB颜色c1和c2 背景c2上的50%(α)c1与背景c1上的50%c2之间是否存在差异 使用公式out=alpha*new+(1-alpha)*old(from),两者的结果相同: 50% blue on 100% red = 0.5 * blue + (1 - 0.5) red = 0.5 * blue + 0.5 red 100% red on 50% blue = 0.5 * red + (1 - 0.5) blue = 0.5 * red + 0.5 blue thu

假设我们有两种ARGB颜色c1和c2

背景c2上的50%(α)c1与背景c1上的50%c2之间是否存在差异

使用公式
out=alpha*new+(1-alpha)*old
(from),两者的结果相同:

50% blue on 100% red = 0.5 * blue + (1 - 0.5) red = 0.5 * blue + 0.5 red
100% red on 50% blue = 0.5 * red + (1 - 0.5) blue = 0.5 * red + 0.5 blue
thus, 50% blue on 100% red = 100% red on 50% blue
然而,声称“100%蓝色上的50%红色”是
#80007f
,“100%红色上的50%蓝色”是
#7f0080

因此,我想知道上面的算法是否只用于简单的实际近似


有没有另一个公式可以让我们得到更真实的结果?(因为Adobe在图形方面非常出色,我认为他们不太可能做出如此简单的舍入错误)

c2上的50%c1和c1上的50%c2应该给出完全相同的颜色,正如您通过非常简单的算法所注意到的那样

所以混合红色(#ff0000)和蓝色(#0000ff)50-50应该会得到#7f007f。如果得到#80007f,则距离足够近,错误可能是由于其他原因造成的,例如,如果您的图像不是RGB模式,而是HSL模式,或者photoshop选择在内部用HSL表示图像


浮点计算和舍入误差可能引起其他误差。然而,#80007f和#7f007f几乎相同,因此,如果photoshop开发人员意识到这种不精确性,他们可能会选择忽略它。

这不是一个真正的编程问题…@OliCharlesworth,用于显示的RGB颜色在现实世界中并不存在。它们只与计算机有关。程序员在100%的红色上呈现50%的蓝色和在100%的蓝色上呈现50%的红色是一样的吗?为什么你对结果感到惊讶?带有蓝色覆盖的红色背景与带有红色覆盖的蓝色背景不同。例如,如果两者都有50%的透明度,结果将是相同的。如果蓝色超过红色,则基于透明度,如果不透明度较低,则显示更多的红色。另一方面,更多的蓝色会显示出来。这类似于使用带有蓝色或红色覆盖层的白色背景。它们看起来不一样,因为它们的透明度都是50%。@PENDO,我用有趣的给出的公式计算结果,我不知道:)。我删除了我的答案。我被纠正了!:)