我尝试使用QWidget
在QPainter::drawPixmap()
内绘制图标(.png)
:
QPixmap _source = "/.../.png";
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.drawPixmap(rect(), _source);
但与QLabel
(例如)和较小尺寸(在我的情况下为19 * 19)相比,结果并不完美。
我该怎么办?
**** ****编辑
带有pixmap @ size 19 * 19的 QLabel
:
我的画作@ size 19 * 19来自SmoothPixmapTransform
渲染类型:
答案 0 :(得分:8)
您正在设置错误的渲染提示,您需要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()
的{{1}}方法要差。