IMA*_*N4K 5 qt qwidget qpixmap qpainter qt5.5
我想画一个内部的图标文件(.png)QWidget
有QPainter::drawPixmap()
:
QPixmap _source = "/.../.png";
painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.drawPixmap(rect(), _source);
Run Code Online (Sandbox Code Playgroud)
但与QLabel
(例如)和较小尺寸(在我的情况下为19*19)相比,结果并不完美.
我能做什么?
****编辑****
QLabel
与pixmap @ size 19*19:
我的绘画@ size 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);
Run Code Online (Sandbox Code Playgroud)
此代码生成以下结果:
第二个和第三个图像之间几乎没有任何区别,手动将源图像缩放到所需的尺寸并绘制它会产生最佳结果.这当然是不对的,预计SmoothTransformation
会产生相同的结果,但由于某种原因,它的缩放程度不如scale()
方法QPixmap
.