QPainter :: drawPixmap()不好看,质量低?
问题描述:
我想画一个QWidget
内的图标文件(.png)与QPainter::drawPixmap()
:QPainter :: drawPixmap()不好看,质量低?
QPixmap _source = "/.../.png";
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.drawPixmap(rect(), _source);
但比较QLabel
(例如)和较低的尺寸(19在我的情况* 19)结果并不完美。
我该怎么办?
**** ****编辑
QLabel
与像素图@尺寸19 * 19:
我的画@尺寸19 * 19经SmoothPixmapTransform
渲染类型:
答
您正在设置错误的提示提示,您需要QPainter::SmoothPixmapTransform
以顺利调整大小。默认情况下,使用最近邻居方法,该方法速度快,但质量非常低,并使结果像素化。
QPainter::HighQualityAntialiasing
用于绘制线条和填充路径等,即使用OpenGL后端进行栅格化时,对绘制栅格图形没有影响。
编辑:似乎只有这么多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
。
Thanks.i试过你说的,但结果是一样的! – IMAN4K
我已更新我的问题 – IMAN4K
@ IMAN4K原始图像有多大? – dtech