【问题标题】:QML canvas drawImage does not work properly with AA_EnableHighDpiScalingQML 画布 drawImage 不能与 AA_EnableHighDpiScaling 一起正常工作
【发布时间】:2019-08-21 11:23:17
【问题描述】:

我创建了一个 qml 应用程序,在 Wacom 平板电脑上绘图到 qml 画布。 绘制完成后,我将base64图像发送到服务器,如果需要,我读取并绘制回来。

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

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

当我不使用 Qt::AA_EnableHighDpiScaling 时,质量仍然很好。但是如果没有 Qt::AA_EnableHighDpiScaling,应用程序 gui 在 4k 屏幕上太小了。

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

这是我用来保存图像的:

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。

【问题讨论】:

    标签: qt canvas qml dpi drawimage


    【解决方案1】:

    我找到了解决办法;

      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();
    

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      相关资源
      最近更新 更多