显示图像而不会降低质量

时间:2019-06-11 15:51:20

标签: c++ image qt qml splash-screen

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

已经尝试过Qt :: SmoothTransformation

将笔记本电脑连接到显示器(我有2K显示器)并在显示管理中选择“重复显示”选项,会产生低质量的图像。选择“仅第二屏”可产生高质量的图像。

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

splash.show();

有没有显示图像而不降低画质的方法? 我在QML中也遇到了与“图片”相同的问题。

1 个答案:

答案 0 :(得分:0)

如果Qt试图在较高分辨率的显示器上以相同的“物理”尺寸渲染图像,则它将别无选择,只能放大图像。您应该提供更高分辨率的图像:

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

  

目标平台可能会自动加载替代项   以各种方式用于不同显示密度的资源。在iOS上,   @ 2x文件名后缀用于指示图像的高DPI版本。   图像QML类型和QIcon类自动加载@ 2x版本   图像和图标(如果提供)。 QImage和QPixmap   类自动设置@ 2x版本的devicePixelRatio   图片到2,但您需要添加代码以实际使用@ 2x   版本:

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

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

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