Save grayscale palleted images to grayscale png
authorSergey Borovkov <serge.borovkov@gmail.com>
Sat, 27 Oct 2012 14:17:05 +0000 (18:17 +0400)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 8 Nov 2012 23:37:42 +0000 (00:37 +0100)
While Qt does not support grayscale images explicitly it makes sense to
save palleted images to grayscale png when possible for better
compression and compatibility as opening and saving grayscale images now
converts them to palleted

Change-Id: Iab7c5a5a9d24b9352f5a7bafe04824a97d2463d9
Reviewed-by: aavit <eirik.aavitsland@digia.com>
src/gui/image/qpnghandler.cpp

index 8434282..bedf881 100644 (file)
@@ -102,7 +102,6 @@ QT_BEGIN_NAMESPACE
   All PNG files load to the minimal QImage equivalent.
 
   All QImage formats output to reasonably efficient PNG equivalents.
-  Never to grayscale.
 */
 
 class QPngHandlerPrivate
@@ -834,8 +833,12 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image, vo
 
 
     int color_type = 0;
-    if (image.colorCount())
-        color_type = PNG_COLOR_TYPE_PALETTE;
+    if (image.colorCount()) {
+        if (image.isGrayscale())
+            color_type = PNG_COLOR_TYPE_GRAY;
+        else
+            color_type = PNG_COLOR_TYPE_PALETTE;
+    }
     else if (image.hasAlphaChannel())
         color_type = PNG_COLOR_TYPE_RGB_ALPHA;
     else
@@ -852,7 +855,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image, vo
     if (image.format() == QImage::Format_MonoLSB)
        png_set_packswap(png_ptr);
 
-    if (image.colorCount()) {
+    if (color_type == PNG_COLOR_TYPE_PALETTE) {
         // Paletted
         int num_palette = qMin(256, image.colorCount());
         png_color palette[256];