aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikhail Svetkin <mikhail.svetkin@qt.io>2018-12-21 14:16:56 +0100
committerMikhail Svetkin <mikhail.svetkin@qt.io>2018-12-21 20:29:00 +0000
commit03b084e6397b990c69028dc2bbf3226e7339c4a5 (patch)
tree3332ec8c00b1050c56b5d2f8383661812218dfae
parent92dff998b3bf73ee0ad9d636454379869318975f (diff)
Avoid create an additional copy of an image
Try to convert an image in place instead of make a copy of the image. Change-Id: I6956c7002b1fac2c4f315b2c5396e5d7ca52d810 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/quick/util/qquickpixmapcache.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/quick/util/qquickpixmapcache.cpp b/src/quick/util/qquickpixmapcache.cpp
index d31e112031..ea6d376ce7 100644
--- a/src/quick/util/qquickpixmapcache.cpp
+++ b/src/quick/util/qquickpixmapcache.cpp
@@ -369,15 +369,27 @@ static void maybeRemoveAlpha(QImage *image)
switch (image->format()) {
case QImage::Format_RGBA8888:
case QImage::Format_RGBA8888_Premultiplied:
+ if (image->data_ptr()->convertInPlace(QImage::Format_RGBX8888, Qt::AutoColor))
+ break;
+
*image = image->convertToFormat(QImage::Format_RGBX8888);
break;
case QImage::Format_A2BGR30_Premultiplied:
+ if (image->data_ptr()->convertInPlace(QImage::Format_BGR30, Qt::AutoColor))
+ break;
+
*image = image->convertToFormat(QImage::Format_BGR30);
break;
case QImage::Format_A2RGB30_Premultiplied:
+ if (image->data_ptr()->convertInPlace(QImage::Format_RGB30, Qt::AutoColor))
+ break;
+
*image = image->convertToFormat(QImage::Format_RGB30);
break;
default:
+ if (image->data_ptr()->convertInPlace(QImage::Format_RGB32, Qt::AutoColor))
+ break;
+
*image = image->convertToFormat(QImage::Format_RGB32);
break;
}