Отображение изображения без потери качества - PullRequest
0 голосов
/ 11 июня 2019

Я использую 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 голосов
/ 11 июня 2019

Если Qt пытается визуализировать изображение с тем же «физическим» размером на дисплее с более высоким разрешением, то у него не будет другого выбора, кроме как увеличить изображение. Вы должны предоставить изображение с более высоким разрешением:

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

Целевые платформы могут автоматизировать загрузку альтернативных ресурсы для разных плотностей отображения различными способами. На iOS @ 2x суффикс имени файла используется для обозначения версий изображений с высоким разрешением. Тип Image QML и класс QIcon автоматически загружают версии @ 2x изображений и значков, если они предоставляются. QImage и QPixmap классы автоматически устанавливают devicePixelRatio @ 2x версий изображений до 2, но вам нужно добавить код, чтобы фактически использовать @ 2x версии:

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

Забудьте про iOS - я думаю, что она устарела, потому что уже давно применяется ко всем платформам.

Так что в вашем случае вы должны добавить splash@2x.png, который в два раза больше разрешения (и детализации) splash.png. Если вы просто используете QPixmap, вам нужно добавить приведенный выше код, чтобы убедиться, что выбран правильный вариант изображения. Если вы используете тип изображения QML, он выберет его автоматически.

...