1

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

背景 c2 上的 50% (alpha) c1 与背景 c1 上的 50% c2 之间有什么区别吗?

使用公式out = alpha * new + (1 - alpha) * old(来自另一个线程),两者都会有相同的结果:

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

因此,我想知道上述算法是否仅用于简单的现实近似?

是否有另一个公式可以为我们提供更真实的结果?(由于 Adob​​e 在图形方面相当领先,我认为他们不太可能犯这么简单的四舍五入错误)

4

1 回答 1

3

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

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

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

于 2013-03-30T11:58:22.917 回答