From 433e4380c98b9369a7d55894e9d34f8c87ba06e9 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 10 Mar 2011 17:11:09 +0200 Subject: Fix for fromSymbianCFbsBitmap changing the source data unexpectedly. Inverting the pixels for bitmaps of mode EGray2 is done in-place, which is wrong if the bitmap handle was duplicated. Instead, we need to make a copy. This also means that we cannot treat EGray2 a conversion-less format in openvg, but such images are likely to be used as masks only, so optimizing just for mere drawing in case of this format is not really necessary. Reviewed-by: Jani Hautakangas --- src/gui/image/qvolatileimagedata_symbian.cpp | 3 +++ src/openvg/qvg_symbian.cpp | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/image/qvolatileimagedata_symbian.cpp b/src/gui/image/qvolatileimagedata_symbian.cpp index 474d0ef..6e2909b 100644 --- a/src/gui/image/qvolatileimagedata_symbian.cpp +++ b/src/gui/image/qvolatileimagedata_symbian.cpp @@ -392,6 +392,9 @@ void QVolatileImageData::initWithBitmap(CFbsBitmap *source) } else if (needsCopy) { // Rasterize extended and compressed bitmaps. bitmap = rasterizeBitmap(source, EColor16MAP); + } else if (source->DisplayMode() == EGray2) { + // The pixels will be inverted, must make a copy. + bitmap = rasterizeBitmap(source, source->DisplayMode()); } else { // Efficient path: no pixel data copying. Just duplicate. This of course // means the original bitmap's data may get modified, but that's fine diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 405151d..2924d41 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -157,7 +157,6 @@ static inline bool conversionLessFormat(QImage::Format format) case QImage::Format_RGB32: // EColor16MU case QImage::Format_ARGB32: // EColor16MA case QImage::Format_ARGB32_Premultiplied: // EColor16MAP - case QImage::Format_MonoLSB: // EGray2 case QImage::Format_Indexed8: // EGray256, EColor256 return true; default: -- cgit v0.12