代码之家  ›  专栏  ›  技术社区  ›  Stefan Octavian

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

  •  2
  • Stefan Octavian  · 技术社区  · 8 年前

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

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

    我注意到,如果有两个组件(r、g或b)为0,那么必须保持非空组件的值,并将空组件调整为相同的值,以便与白色匹配。这个值(我猜)取决于半透明颜色的alpha分量。但我似乎找不到公式。剩下的案子呢?我认为一定有一个可以应用的通用公式。

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

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

    1 回复  |  直到 8 年前
        1
  •  9
  •   user6083685 user6083685    8 年前

    我知道这个从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 ]
    

    但这不适合你的例子

    推荐文章