如何将颜色组合在一起,就像将一种颜色涂在另一种颜色上一样?

cre*_*not 8 dart flutter

我基本上想将两种颜色添加在一起,就像我要对一个Canvas对象执行以下操作一样:

canvas.drawPaint(Paint()..color = colorB);
canvas.drawPaint(Paint()..color = colorA);
Run Code Online (Sandbox Code Playgroud)

本质上,我有一个背景颜色colorA和另一种颜色colorB。我想要得到combinedColor的结果是colorA在画布上绘画colorB不使用画布的结果。

我尝试了以下方法,但没有实现:

final combinedColor = colorA + colorB;
Run Code Online (Sandbox Code Playgroud)

例如,如果我想在半透明colorA和另一种颜色上绘画colorA,则另一种颜色应充当背景,即就好像它本身具有完全不透明度一样 - 基本上就是您所期望的方式。

我如何将这样的颜色添加在一起?

cre*_*not 23

Color我碰巧在课堂上找到了一个方法:

Color.alphaBlend

final colorC = Color.alphaBlend(colorA, colorB);
Run Code Online (Sandbox Code Playgroud)

alphaBlend允许您组合两种颜色,其中第一个参数是前景色第二个参数是背景色。所以这里colorA是前景色和colorB背景色。

operator +

可以通过创建以下代码extension来使问题中的代码示例正常工作:

extension on Color {
  Color operator +(Color other) => Color.alphaBlend(this, other);
}
Run Code Online (Sandbox Code Playgroud)

现在,以下代码将起作用:

final combinedColor = colorA + addendColor;
Run Code Online (Sandbox Code Playgroud)

请注意,我创建扩展的方式,加数(此处addendColor)将是背景。您可以通过返回(this, other)到 来更改此设置(other, this)