想象一下,我们有两种ARGB颜色c1和c2。
背景c2上的50%(alpha)c1与背景c1上的50%c2之间是否存在差异?
使用公式out = alpha * new + (1 - alpha) * old
(来自another thread),两者都会有相同的结果:
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
但是,Photoshop CS5声称“100%蓝色的50%红色”为#80007f
,“100%红色的50%蓝色”为#7f0080
。
因此,我想知道上述算法只适用于简单现实生活近似?
还有另一个公式可以给我们带来更真实的结果吗?(因为Adobe在图形方面非常 up-there ,我认为它们不太可能这么简单的舍入错误)
答案 0 :(得分:3)
c2上的50%c1和c1上的50%c2应该给出完全相同的颜色,正如您通过非常简单的算法所注意到的那样。
所以混合红色(#ff0000)和蓝色(#0000ff)50-50应该给你#7f007f。如果你得到#80007f它足够接近并且错误可能是由于某些其他原因造成的,例如,如果你的图像不是在RGB模式而是在HSL中,或者如果photoshop选择在内部用HSL表示它。
浮点计算和舍入错误可能会引发其他错误。然而,#80007f和#7f007f几乎是一样的,所以如果Photoshop开发人员意识到这种不精确,他们可能会选择忽略它。