【发布时间】:2013-03-30 11:13:52
【问题描述】:
假设我们有两种 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 在图形方面非常领先,我认为他们不太可能做出这么简单的舍入错误)
【问题讨论】:
-
不是真正的编程问题...
-
@OliCharlesworth,用于显示器的 RGB 颜色在现实世界中不存在。它们只与计算机有关。程序员应该在 100% 红色上渲染 50% 蓝色与在 100% 蓝色上渲染 50% 红色相同吗?
-
为什么对结果感到惊讶?带有蓝色覆盖层的红色背景与带有红色覆盖层的蓝色背景不同。例如,如果两者都具有 50% 的透明度,结果将是相同的。如果蓝色超过红色,则 - 基于透明度 - 如果不透明度较低,则会显示更多红色。更多蓝色的另一种方式将显示出来。这类似于使用带有蓝色或红色叠加层的白色背景。它们看起来不一样,因为它们的透明度都是 50% ...
-
@PENDO,我用stackoverflow.com/a/746937/632951给出的公式计算了结果
-
有趣,没有意识到这一点:)。我删除了我的答案。我站纠正! :)
标签: language-agnostic colors transparency