【问题标题】:"50% blue on 100% red" vs "50% red on 100% blue" [closed]“100% 红色上 50% 蓝色”与“100% 蓝色上 50% 红色”[关闭]
【发布时间】: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

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

还有其他公式可以为我们提供更真实的结果吗?(由于 Adob​​e 在图形方面非常领先,我认为他们不太可能做出这么简单的舍入错误)

【问题讨论】:

  • 不是真正的编程问题...
  • @OliCharlesworth,用于显示器的 RGB 颜色在现实世界中不存在。它们只与计算机有关。程序员应该在 100% 红色上渲染 50% 蓝色与在 100% 蓝色上渲染 50% 红色相同吗?
  • 为什么对结果感到惊讶?带有蓝色覆盖层的红色背景与带有红色覆盖层的蓝色背景不同。例如,如果两者都具有 50% 的透明度,结果将是相同的。如果蓝色超过红色,则 - 基于透明度 - 如果不透明度较低,则会显示更多红色。更多蓝色的另一种方式将显示出来。这类似于使用带有蓝色或红色叠加层的白色背景。它们看起来不一样,因为它们的透明度都是 50% ...
  • @PENDO,我用stackoverflow.com/a/746937/632951给出的公式计算了结果
  • 有趣,没有意识到这一点:)。我删除了我的答案。我站纠正! :)

标签: language-agnostic colors transparency


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2013-12-19
    • 2018-09-15
    • 2014-08-26
    • 2012-08-03
    相关资源
    最近更新 更多