Flutter:在Canvas中使用drawImageRect遮罩PaintImage

问题描述

我正在尝试遮罩我的部分绘图(使用“ image”(ui.image)绘制的pnt)-我必须使用 由于性能原因,paintimage。有用。 然后,我尝试使用ui.image('mask')遮罩图形,该ui.image是由alpha +黑色像素组合而成的png。因此,结果应该是隐藏了蒙版中存在黑色部分的pnts图。 它只是绘制黑色而不是蒙版的透明像素。.没有BlendMode实际起作用。

   @override
        Future paint(Canvas canvas,Size size) async {

    var rect = Rect.fromLTRB(0,w,h);
    Paint paint = new Paint();
    Size outputSize = rect.size;

    if (image != null) {

      pnts.forEach((element) async {
        canvas.save();
        canvas.translate(element.dx,element.dy);
        canvas.rotate(getAngle(element));
        canvas.translate(-element.dx,-element.dy);
        paintimage(canvas: canvas,rect: Rect.fromCenter(center: element,height: 50,width: 50),image: image,);
        canvas.restore();
        prevPoint = element;
      });

      if (mask != null) {
        //Mask
        Size maskInputSize = Size(mask.width.todouble(),mask.height.todouble());
        final FittedSizes maskFittedSizes =
          applyBoxFit(BoxFit.cover,maskInputSize,outputSize);
        final Size maskSourceSize = maskFittedSizes.source;

        final Rect maskSourceRect = Alignment.center
            .inscribe(maskSourceSize,Offset.zero & maskInputSize);
        canvas.saveLayer(rect,paint);
        canvas.drawImageRect(mask,maskSourceRect,rect,paint..blendMode = BlendMode.dstATop);
        canvas.restore();
      }
    }
  }

结果:

outcome

预期结果:

Expected result

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)