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

时间:2018-01-20 18:17:59

标签: javascript colors pseudocode rgba

假设我在白色背景上有颜色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,那么你必须保留not-null组件的值并将null组件调整为相同的值,以便它与wight颜色匹配。这个值(我猜)取决于半透明颜色的alpha分量。但我似乎无法找到这个公式。其余案件怎么样?我认为必须有一个可以应用的通用公式。

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

另外,我不参与任何项目。此问题仅用于学习目的和帮助可能需要此功能的人员。

1 个答案:

答案 0 :(得分:2)

我知道这个公式可以从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 ]

但这不适合你的例子

相关问题