颜色超过颜色:如何获得最终颜色?

时间:2015-07-02 12:36:44

标签: colors transparency

我有下一个任务:

  • 让我们说,有两种颜色:color1和color2
  • color1是半透明的(也可能是color2)
  • 我知道color1和color2的ARGB值
  • 如何通过叠加color1和color2获得颜色的ARGB值,反之亦然?

以下是我要找的图片: enter image description here

这是一段代码片段(C#):

    private Color getOverlapColor(Color frontColor, Color backColor)
    {
        //return...
    }

1 个答案:

答案 0 :(得分:0)

最简单的方法是假设线性比例。

int blend(int front, int back, int alpha)
    => back + (front - back) * alpha / 255;

然后:

Color getOverlapColor(Color front, Color back)
{
    var r = blend(front.Red, back.Red, front.Alpha);
    var g = blend(front.Green, back.Green, front.Alpha);
    var b = blend(front.Blue, back.Blue, front.Alpha);
    var a = unsure;
    return new Color(r, g, b, a);
}

我不确定如何计算得到的alpha:

  • 如果front.Alphaback.Alpha都为0,则结果也为0.
  • 如果front.Alpha为0,则结果为back.Alpha
  • 如果front.Alpha为255,则back.Alpha的值无关紧要。
  • 如果front.Alphaback.Alpha均为50%,则结果必须大于50%。

但我确信有人已经弄明白了以上所有内容。一些SVG渲染器,或GIMP,或其他一些图像处理库应该已经有了这个代码,经过仔细测试并在实践中得到了验证。