显示图像而不损失质量

Display Image without loosing quality

我正在使用 QSplashScreen 为我的 QtQuick 2 应用程序显示初始屏幕。我使用的是质量不错的图像 (838 X 500)。它在某些屏幕分辨率下正确显示。但是对于其他一些分辨率,如 2K 分辨率,似乎应用了一些低质量的转换。

已经尝试过Qt::SmoothTransformation

将我的笔记本电脑连接到我的显示器(我有 2K 显示器)并在显示管理中选择 'Duplicate display' 选项,生成低质量图像。选择 'Second screen only' 会生成质量不错的图像。

QPixmap pixmap(qApp->applicationDirPath()+"/splash.png");
QSplashScreen splash(pixmap.scaledToWidth(screen_width*0.35,Qt::SmoothTransformation));

splash.show();

有没有办法在不降低质量的情况下显示图像? 我在 QML 中遇到与 'Image' 相同的问题。

如果 Qt 试图在更高分辨率的显示器上以相同的 "physical" 尺寸渲染图像,那么它将别无选择,只能放大图像。您应该提供更高分辨率的图片:

https://doc.qt.io/qt-5/scalability.html#loading-files-depending-on-platform

The target platforms might automate the loading of alternative resources for different display densities in various ways. On iOS, the @2x filename suffix is used to indicate high DPI versions of images. The Image QML type and the QIcon class automatically load @2x versions of images and icons if they are provided. The QImage and QPixmap classes automatically set the devicePixelRatio of @2x versions of images to 2, but you need to add code to actually use the @2x versions:

if ( QGuiApplication::primaryScreen()->devicePixelRatio() >= 2 ) {
    imageVariant = "@2x";
} else {
    imageVariant = "";
}

忘记关于 iOS 的部分 - 我认为它已经过时了,因为它已经适用于所有平台一段时间了。

因此,在您的情况下,您应该添加一个 splash@2x.png,它是 splash.png 分辨率(和细节)的两倍。如果您只是使用 QPixmap,则需要添加上面的代码以确保 select 编辑了正确的图像变体。如果您使用 QML 的图像类型,它将自动 select。