您设置了错误的渲染提示,您需要QPainter::SmoothPixmapTransform
以获得平滑的调整大小。默认情况下,使用最近邻方法,该方法速度快,但质量非常低,并且会使结果像素化。
QPainter::HighQualityAntialiasing
用于绘制线条和填充路径等时,即光栅化几何体时,它对绘制光栅图形没有影响。
编辑:似乎只有这么多SmoothPixmapTransform
可以做,当最终结果如此之小时,它并不多:
QPainter p(this);
QPixmap img("e://img.png");
p.drawPixmap(QRect(50, 0, 50, 50), img);
p.setRenderHint(QPainter::SmoothPixmapTransform);
p.drawPixmap(QRect(0, 0, 50, 50), img);
img = img.scaled(50, 50, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
p.drawPixmap(100, 0, img);
此代码产生以下结果:
第二个和第三个图像之间几乎没有任何区别,手动将源图像缩放到所需的尺寸并绘制它会产生最佳结果。这当然是不对的,这是期望的SmoothTransformation
产生相同的结果,但由于某种原因,它的缩放比例不如scale()
的方法QPixmap
.