我使用QPainter和drawImage函数在地图上绘制飞机。每次飞机位置改变时,图像重新绘制。问题是,经过一段时间后,图像变得非常像素化。我试图使用高质量的.svg,这也没有用。
以下是我的代码。有人可以找出错误的位置或导致图像像素化的原因吗?
InvalidateRect(NULL)
以下是绘制飞机的图像。一个在程序运行开始时作为屏幕截图,另一个在几分钟后拍摄。
答案 0 :(得分:2)
您遇到的一个问题是,您首先要重新缩放图像然后再旋转它。 旋转需要插入旧像素的新像素。输入分辨率越高,插值质量越好。重新缩放操作后,SVG的质量完全丧失。
您面临的第二个问题是您使用“快速”(默认)转换方法。这种方法不是抗锯齿。因此,不是从几个输入像素进行插值,而是仅采用一个最佳拟合。使用第二个参数transformed()
和Qt::SmoothTransformation
使用sceond参数scaled()
调用Qt::SmoothTransformation |
Qt :: KeepAspectRatio将极大地改善您的结果。
然而它也更慢,就像以原始的更高分辨率对图像进行旋转一样。
可以说是解决问题的最佳方法是采用不同的方法。您应该使用矢量图形,而不是将SVG加载到QImage(基于光栅的图像)中。因此,SVG首先以正确的方向和比例呈现。一个很好的起点是SVG Viewer示例:http://doc.qt.io/qt-5/qtsvg-svgviewer-example.html