diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2014-12-20 06:36:17 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-12-20 07:59:07 +0100 |
commit | 86d04cfe2bdceca401cab228bd63245f16e65731 (patch) | |
tree | 4273b2f5879371d130cce0d6a97a7eb75175c980 /src/gui/image/qimage.cpp | |
parent | 0dd38014b307f12368888c089195b084158f94a3 (diff) | |
parent | e281537f2049af0b96fd87158f2b7212afe8ab5f (diff) |
Merge "Merge remote-tracking branch 'origin/5.4' into dev" into refs/staging/dev
Diffstat (limited to 'src/gui/image/qimage.cpp')
-rw-r--r-- | src/gui/image/qimage.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 867cb7c322..1cd5b869a6 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -4511,7 +4511,6 @@ QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode dImage.d->dpmx = dotsPerMeterX(); dImage.d->dpmy = dotsPerMeterY(); - dImage.d->devicePixelRatio = devicePixelRatio(); // initizialize the data if (d->format == QImage::Format_Indexed8) { @@ -4526,13 +4525,19 @@ QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode memset(dImage.bits(), 0x00, dImage.byteCount()); if (target_format >= QImage::Format_RGB32) { + // Prevent QPainter from applying devicePixelRatio corrections + const QImage sImage = (devicePixelRatio() != 1) ? QImage(constBits(), width(), height(), format()) : *this; + + Q_ASSERT(sImage.devicePixelRatio() == 1); + Q_ASSERT(sImage.devicePixelRatio() == dImage.devicePixelRatio()); + QPainter p(&dImage); if (mode == Qt::SmoothTransformation) { p.setRenderHint(QPainter::Antialiasing); p.setRenderHint(QPainter::SmoothPixmapTransform); } p.setTransform(mat); - p.drawImage(QPoint(0, 0), *this); + p.drawImage(QPoint(0, 0), sImage); } else { bool invertible; mat = mat.inverted(&invertible); // invert matrix @@ -4544,6 +4549,8 @@ QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode int dbpl = dImage.bytesPerLine(); qt_xForm_helper(mat, 0, type, bpp, dImage.bits(), dbpl, 0, hd, sptr, sbpl, ws, hs); } + + dImage.d->devicePixelRatio = devicePixelRatio(); return dImage; } |