我们目前正在使用商业库通过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(以避免缩放每个绘画事件)
而是与画家一起使用。

10-08 09:47