Canvas 如何将矩阵过滤器应用于画布?

Canvas 如何将矩阵过滤器应用于画布?,canvas,flutter,dart,paint,colorfilter,Canvas,Flutter,Dart,Paint,Colorfilter,我正在使用颤振框架和Dart开发一个图像编辑器,但我无法将矩阵过滤器应用于画布 我试图使用“Paint”类和“canvas.drawPaint(Paint)”函数将矩阵过滤器应用于画布,但得到的是黑色画布 我希望得到一个带有过滤图像的画布,但我得到了一个黑色画布。 我试图将BlendMode指定给绘图,但没有效果。drawPaint用给定的绘图填充画布。在您的情况下,它使用黑色填充 您应该修改第一个示例: final matrix=ColorFilter.matrix([ 0.393, 0

我正在使用颤振框架和Dart开发一个图像编辑器,但我无法将矩阵过滤器应用于画布

我试图使用“Paint”类和“canvas.drawPaint(Paint)”函数将矩阵过滤器应用于画布,但得到的是黑色画布

我希望得到一个带有过滤图像的画布,但我得到了一个黑色画布。
我试图将BlendMode指定给绘图,但没有效果。

drawPaint
用给定的
绘图填充画布。在您的情况下,它使用黑色填充

您应该修改第一个示例:

final matrix=ColorFilter.matrix([
0.393, 0.768, 0.189, 0.0, 0.0,
0.349, 0.686, 0.168, 0.0, 0.0,
0.272, 0.534, 0.131, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0, 0.0,
]);
pushColorFilter(偏移量,矩阵,(上下文,偏移量){
绘画图像(
画布:画布,
rect:偏移量和目标大小,
图像:图像,
fit:BoxFit.fill
);
});

这将创建一个新图层,并对其应用颜色过滤器。

您找到答案了吗?
class EditorPainter extends CustomPainter {

  final ui.Image image;
  final double zoom;
  final Offset offset;

  EditorPainter({
    @required this.image,
    @required this.zoom,
    @required this.offset,
    this.elements
  });

  @override
  void paint(Canvas canvas, Size size) {
    Size imageSize = Size(image.width.toDouble(), image.height.toDouble());
    Size targetSize = imageSize * zoom;

    // Variant 1 - not working (draws black canvas)

    paintImage(
      canvas: canvas,
      rect: offset & targetSize,
      image: image,
      fit: BoxFit.fill
    );


    // Paint with "sepia" filter
    final Paint paint = Paint()
      ..colorFilter = ColorFilter.matrix([
        0.393, 0.768, 0.189, 0.0, 0.0,
        0.349, 0.686, 0.168, 0.0, 0.0,
        0.272, 0.534, 0.131, 0.0, 0.0,
        0.0, 0.0, 0.0, 1.0, 0.0,
      ]);

    canvas.drawPaint(paint);

    // Variant 2 - working 
    // Image with "sepia" filter
    paintImage(
      canvas: canvas,
      rect: offset & targetSize,
      image: image,
      fit: BoxFit.fill,
      colorFilter: ColorFilter.matrix([
        0.393, 0.768, 0.189, 0.0, 0.0,
        0.349, 0.686, 0.168, 0.0, 0.0,
        0.272, 0.534, 0.131, 0.0, 0.0,
        0.0, 0.0, 0.0, 1.0, 0.0,
      ])
    );
  }
}