QML canvas drawImage 无法与 AA_EnableHighDpiScaling 一起正常工作

QML canvas drawImage does not work properly with AA_EnableHighDpiScaling

我创建了一个 qml 应用程序,它在 Wacom 数位板上绘图到 qml canvas。 画好之后,我把base64图片发到服务器,如果需要,我读完再画回来。

画的图很好看。当我在服务器上查看图像时,它的质量很好。但是当我再次将它绘制到 canvas 时,它有点模糊。如果我反复保存和重新绘制图像,它会越来越模糊。

在高清屏幕上不太明显,但是当我使用 4K 屏幕时,图像质量很糟糕。

当我不使用时 Qt::AA_EnableHighDpiScaling 质量仍然很好。但是没有 Qt::AA_EnableHighDpiScaling 是应用程序图形用户界面在 4k 屏幕上太小了。

当我在 canvas 中禁用平滑和抗锯齿时,图像不模糊但看起来不太好。

这是我用来保存图片的:

var loadedImage = canvas.toDataURL("image/png")

这是用来加载图片的:

canvas.loadImage(loadedImage)

Canvas{
   id: canvas
   onImageLoaded:{
      var ctx = canvas.getContext("2d");
      ctx.drawImage(loadedImage,canvas.x,canvas.y,canvas.width,canvas.height);
      canvas.requestPaint();
}

及部分绘图功能:

var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(canvas.prevX, canvas.prevY);
ctx.lineTo(newPoint.x, newPoint.y);
ctx.stroke();
ctx.closePath();
canvas.prevX = newPoint.x;
canvas.prevY = newPoint.y;
canvas.requestPaint();

启用 AA_EnableHighDpiScaling 时如何修复 drawImage?我使用 Qt 5.9.

我找到了解决办法;

  onImageLoaded:{
  var ctx = canvas.getContext("2d");
  ctx.scale(1/Screen.devicePixelRatio,1/Screen.devicePixelRatio);
  ctx.drawImage(loadedImage,canvas.x,canvas.y);
  ctx.scale(Screen.devicePixelRatio,Screen.devicePixelRatio);
  canvas.requestPaint();