我想画一个内部的图标文件(.png)QWidget
有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
用于绘制线和填充路径等时,即在栅格化几何图形时,它对绘制栅格图形没有影响。
编辑:似乎只能做很多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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句