diff options
-rw-r--r-- | src/gui/image/qimage.cpp | 11 | ||||
-rw-r--r-- | src/gui/image/qimage_conversions.cpp | 98 | ||||
-rw-r--r-- | src/gui/image/qimage_p.h | 2 |
3 files changed, 52 insertions, 59 deletions
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 7840f61ab3..944dd04b8c 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -1877,8 +1877,9 @@ QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) co if (format == Format_Invalid || d->format == Format_Invalid) return QImage(); - const Image_Converter *converterPtr = &converter_map[d->format][format]; - Image_Converter converter = *converterPtr; + Image_Converter converter = qimage_converter_map[d->format][format]; + if (!converter && format > QImage::Format_Indexed8 && d->format > QImage::Format_Indexed8) + converter = convert_generic; if (converter) { QImage image(d->width, d->height, format); @@ -1894,15 +1895,13 @@ QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) co return image; } + // Convert indexed formats over ARGB32 to the final format. Q_ASSERT(format != QImage::Format_ARGB32); Q_ASSERT(d->format != QImage::Format_ARGB32); - QImage image = convertToFormat(Format_ARGB32, flags); - return image.convertToFormat(format, flags); + return convertToFormat(Format_ARGB32, flags).convertToFormat(format, flags); } - - static inline int pixel_distance(QRgb p1, QRgb p2) { int r1 = qRed(p1); int g1 = qGreen(p1); diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp index 9df5646837..c009dcb9e1 100644 --- a/src/gui/image/qimage_conversions.cpp +++ b/src/gui/image/qimage_conversions.cpp @@ -1595,15 +1595,15 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, mask_alpha_converter, mask_alpha_converter, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, convert_RGB_to_RGBA, convert_RGB_to_RGBA, convert_RGB_to_RGBA @@ -1617,15 +1617,15 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat mask_alpha_converter, 0, convert_ARGB_to_ARGB_PM, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, convert_ARGB_to_RGBx, convert_ARGB_to_RGBA, convert_ARGB_to_RGBA_PM, @@ -1658,18 +1658,14 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, 0, 0, 0, 0, -#if defined(QT_QWS_DEPTH_15) && defined(QT_QWS_DEPTH_16) - convert_generic, -#else 0, -#endif + 0, + 0, + 0, 0, 0, 0, @@ -1684,9 +1680,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, @@ -1706,9 +1702,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, @@ -1728,9 +1724,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, @@ -1750,14 +1746,10 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, -#if defined(QT_QWS_DEPTH_15) && defined(QT_QWS_DEPTH_16) - convert_generic, -#else 0, -#endif + 0, + 0, + 0, 0, 0, 0, @@ -1776,9 +1768,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, @@ -1798,9 +1790,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, @@ -1820,9 +1812,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, @@ -1842,9 +1834,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat 0, 0, 0, - convert_generic, - convert_generic, - convert_generic, + 0, + 0, + 0, 0, 0, 0, diff --git a/src/gui/image/qimage_p.h b/src/gui/image/qimage_p.h index 5781cd78f3..2a280a2b18 100644 --- a/src/gui/image/qimage_p.h +++ b/src/gui/image/qimage_p.h @@ -114,6 +114,8 @@ typedef bool (*InPlace_Image_Converter)(QImageData *data, Qt::ImageConversionFla extern Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormats]; extern InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QImage::NImageFormats]; +void convert_generic(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags); + void dither_to_Mono(QImageData *dst, const QImageData *src, Qt::ImageConversionFlags flags, bool fromalpha); void qInitImageConversions(); |