diff options
author | Mikhail Svetkin <mikhail.svetkin@qt.io> | 2018-12-21 14:16:56 +0100 |
---|---|---|
committer | Mikhail Svetkin <mikhail.svetkin@qt.io> | 2018-12-21 20:29:00 +0000 |
commit | 03b084e6397b990c69028dc2bbf3226e7339c4a5 (patch) | |
tree | 3332ec8c00b1050c56b5d2f8383661812218dfae /src/quick/util/qquickpixmapcache.cpp | |
parent | 92dff998b3bf73ee0ad9d636454379869318975f (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>
Diffstat (limited to 'src/quick/util/qquickpixmapcache.cpp')
-rw-r--r-- | src/quick/util/qquickpixmapcache.cpp | 12 |
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; } |