如何解决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();
}
}
}
结果:
预期结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。