我们目前正在使用商业库在 Windows 上进行图像渲染。当显示尺寸小于图像原始尺寸的单色图像时,该库会对图像进行灰度化处理,以便仍然可以识别其中的大部分图像:
现在我对 Qt 4.8 应用程序进行了同样的尝试。 基本上所做的就是调用:
QImage mImage;
...
mImage.load(...);
...
painter.drawImage(paintRect, mImage, mImage.rect());
其中 paintRect 小于 mImage.rect()。这很好用,但输出不太令人满意:
我尝试了几个 renderHints(QPainter::SmoothPixmapTransform、Antialiasing、HighQualityAntialiasing)并使用
mImage = mImage.convertToFormat(QImage::Format_RGB32);
QPainter::SmoothPixmapTransform 似乎稍微改进了输出(包括在屏幕截图中)。所有其他事情似乎都没有改变。
我错过了什么吗?
如何改进缩小尺寸的图像显示?
最佳答案
有可能是在
painter.drawImage(paintRect, mImage, mImage.rect());
当尺寸不同时,画家只是在初始图像中插入哪个像素。这将解释第二张图片。
使用缩放手册
QImage todraw = mImage.scaled(
paintRect.size(),
Qt::IgnoreAspectRatio,
Qt::SmoothTransformation);
...
painter.drawImage(paintRect, todraw, mImage.rect());
您仅在调整大小事件时计算图像todraw
(以避免缩放每个绘制事件)
然后你将它与画家一起使用。
关于windows - QImage抖动质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21857178/