我正在 Flutter 中开发一个应用程序,其中使用 CustomPainter 绘制用户从图库/相机中选择的图像。除此之外,用户还可以绘制线条以及更改笔划值、不透明度颜色和本身的颜色。为此,我创建了 2 个类 DrawEditor 和 DrawingPainter,这两个类的代码可以在下面找到。一旦用户选择了图像,图像就会传递到 DrawingPainter 类,在该类中调用 Paint() 并绘制线条和图像。问题出在 _paintBackgroundImage() 中,在此方法中我使用 canvas.drawImage(paintedImage, Offset.zero, Paint()); 绘制图像 它不会缩放图像。
早些时候,我尝试了一种不同的方法,而不是使用 canvas.drawImage(paintedImage, Offset.zero, Paint()) 绘制图像,而是使用 canvas.drawImageRect(paintedImage, inputSubRect, outputSubRect, Paint()); 如下所示。然而,使用这种方法,绘制图片是像素化的,所以我更喜欢 canvas.drawImage(paintedImage, Offset.zero, Paint()) 因为这不会损坏图片。
任何有关缩放图像的帮助将不胜感激。
//Example 1 : Code with canvas.drawImageRect but image pixelated
final UI.Rect rect = UI.Offset.zero & _canvasSize;
final Size imageSize =Size(paintedImage.width.toDouble(), paintedImage.height.toDouble());
FittedSizes sizes = applyBoxFit(BoxFit.contain, imageSize, _canvasSize);
final Rect inputSubRect =
Alignment.center.inscribe(sizes.source, Offset.zero & imageSize);
final Rect outputSubRect =
Alignment.center.inscribe(sizes.destination, rect);
canvas.drawImageRect(paintedImage, inputSubRect, outputSubRect, …Run Code Online (Sandbox Code Playgroud)