QPainter :: drawPixmap()不好看,质量低?

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:

enter image description here

我的画@尺寸19 * 19经SmoothPixmapTransform渲染类型:

enter image description here

您正在设置错误的提示提示,您需要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); 

此代码将产生以下结果:

enter image description here

第二张和第三张图像几乎没有区别,手动将源图像缩放到所需的尺寸并绘制出最佳结果。这当然是不正确的,预计从SmoothTransformation产生相同的结果,但由于某种原因,其缩放比劣于scale()方法QPixmap

+0

Thanks.i试过你说的,但结果是一样的! – IMAN4K

+0

我已更新我的问题 – IMAN4K

+0

@ IMAN4K原始图像有多大? – dtech