将半透明转换为纯色的算法

问题描述 投票:0回答:2

假设我在白色背景上有颜色 rgba(255, 0, 0, 0.5)。蜜蜂可以看到的颜色几乎与纯色 rgba(255, 140, 140, 1) 相同。我正在寻找一种算法,可以将半透明颜色(白色)转换为纯色,这样当它彼此靠近时,它看起来(几乎)相同(如下图所示)

Two rectangles with diferent colors that look the same on a white background

我注意到,如果有 2 个分量(r、g 或 b)为 0,那么您必须保留非空分量的值,并将空分量调整相同的值,以便它与 wight 颜色匹配。这个值(我猜)取决于半透明颜色的 alpha 分量。但我似乎找不到公式。案件的其余部分怎么样?我认为一定有一个可以应用的通用公式。

我正在寻找伪代码、javascript、Java、Python、C# 或 C++ 的答案。

此外,我没有从事任何项目。这个问题是为了学习目的并帮助可能需要这个的人。

javascript colors pseudocode rgba
2个回答
15
投票

我知道这个公式可以将rgba转换为rgb

function rgba2rgb(background, color) {
    const alpha = color[3]

  return [Math.floor((1 - alpha) * background[0] + alpha * color[0] + 0.5),
        Math.floor((1 - alpha) * background[1] + alpha * color[1] + 0.5),
        Math.floor((1 - alpha) * background[2] + alpha * color[2] + 0.5)]
}

console.log(rgba2rgb([255, 255, 255], [255, 0, 0, 0.5])) // [ 255, 128, 128 ]

但这不适合你的例子


0
投票

我找到了这篇文章 - 将颜色和透明度等同起来

© www.soinside.com 2019 - 2024. All rights reserved.