Android: fix tst_QFrame::testPainting

When we create a QPixmap using QWidget::grab(), a default system
image format is used for that.
On Android this format is ARGB32_Premultiplied, while on the desktop
systems it is RGB32.
The images that are saved in the resources and used as references, also
have the RGB32 format.
As a result, on Android we need to convert the pixmap to a proper format
before comparing it to the reference.

Fixes: QTBUG-69064
Pick-to: 6.3 6.2
Change-Id: I2d881e508d34e0b1a2a1a7bffcbc71ae2907d31d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
bb10
Ivan Solovev 2022-02-25 09:59:03 +01:00
parent 34a4fe0166
commit e37919b758
2 changed files with 10 additions and 4 deletions

View File

@ -1,3 +0,0 @@
# QTBUG-69064
[testPainting]
android

View File

@ -173,7 +173,16 @@ void tst_QFrame::testPainting()
frame.setMidLineWidth(midLineWidth);
frame.resize(16, 16);
const QPixmap pixmap = frame.grab();
QPixmap pixmap = frame.grab();
#ifdef Q_OS_ANDROID
// QPixmap is created with system's default format, which is
// ARGB32_Premultiplied for Android. For desktop systems the format is
// RGB32, so that's also the format of the images in resources. So on
// Android we need to explicitly convert the pixmap to a proper format.
QImage img = pixmap.toImage();
QVERIFY(img.reinterpretAsFormat(QImage::Format_RGB32));
pixmap = QPixmap::fromImage(img);
#endif
const QString fileName = QLatin1String("images/") + basename + QLatin1Char('_')
+ QString::number(lineWidth) + QLatin1Char('_') + QString::number(midLineWidth)