QPainter::drawPixmap() 看起来不好看而且质量很差?
QPainter::drawPixmap() doesn't look good and has low quality?
我正在尝试在 QWidget
中使用 QPainter::drawPixmap()
绘制一个图标 (.png)
:
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
会产生相同的结果,但由于某种原因,它的缩放比例不如 QPixmap
的 scale()
方法。
我正在尝试在 QWidget
中使用 QPainter::drawPixmap()
绘制一个图标 (.png)
:
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
会产生相同的结果,但由于某种原因,它的缩放比例不如 QPixmap
的 scale()
方法。