summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qimage.cpp
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2014-12-20 06:36:17 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-12-20 07:59:07 +0100
commit86d04cfe2bdceca401cab228bd63245f16e65731 (patch)
tree4273b2f5879371d130cce0d6a97a7eb75175c980 /src/gui/image/qimage.cpp
parent0dd38014b307f12368888c089195b084158f94a3 (diff)
parente281537f2049af0b96fd87158f2b7212afe8ab5f (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.cpp11
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;
}