]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed saving PNG in wrong format sometimes.
authorDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Fri, 7 Jan 2011 08:48:43 +0000 (08:48 +0000)
committerDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Fri, 7 Jan 2011 08:48:43 +0000 (08:48 +0000)
When explicitly requesting saving as a palettised image but then later on that turns out to not be possible (or desired) the image would be marked as PNG_COLOR_TYPE_GRAY or PNG_COLOR_TYPE_GRAY_ALPHA. Simply set the colour type to RGB if this occurs also updated the unit test to catch this case.

This is similar to the fix in r66590 but that one was related to wxUSE_PALETTE == 0 cases.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/imagpng.cpp
tests/image/image.cpp

index f2f625c40e017167b7ba6c45c83710d4d1e9fa28..f5f0d829242936143ce9dc87936bf2be99d77895 100644 (file)
@@ -772,12 +772,16 @@ bool wxPNGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbos
     }
 #else
     bool bUsePalette = false;
+#endif // wxUSE_PALETTE
 
-    if (iColorType == wxPNG_TYPE_PALETTE)
+    /*
+    If saving palettised was requested but it was decided we can't use a
+    palette then reset the colour type to RGB.
+    */
+    if (!bUsePalette && iColorType == wxPNG_TYPE_PALETTE)
     {
         iColorType = wxPNG_TYPE_COLOUR;
     }
-#endif // wxUSE_PALETTE
 
     bool bUseAlpha = !bUsePalette && (bHasAlpha || bHasMask);
 
index 53d9243199a5b781e75633ce359784f355f6dc2f..8d7dae6ce14836925349cde2288a4f15f2bce421 100644 (file)
@@ -1038,6 +1038,14 @@ void ImageTestCase::CompareSavedImage()
         }
     }
 
+    /*
+    Explicitly make known we want a palettised PNG. If we don't then this
+    particular image gets saved as a true colour image because there's an
+    alpha channel present and the PNG saver prefers to keep the alpha over
+    saving as a palettised image that has alpha converted to a mask.
+    */
+    expected8.SetOption(wxIMAGE_OPTION_PNG_FORMAT, wxPNG_TYPE_PALETTE);
+
     /*
     The image contains 256 indexed colours and needs another palette entry
     for storing the transparency index. This results in wanting 257 palette
@@ -1066,13 +1074,6 @@ void ImageTestCase::CompareSavedImage()
         red[paletteCount-2], green[paletteCount-2], blue[paletteCount-2]);
 
     expected8.SetPalette(newPal);
-    /*
-    Explicitly make known we want a palettised PNG. If we don't then this
-    particular image gets saved as a true colour image because there's an
-    alpha channel present and the PNG saver prefers to keep the alpha over
-    saving as a palettised image that has alpha converted to a mask.
-    */
-    expected8.SetOption(wxIMAGE_OPTION_PNG_FORMAT, wxPNG_TYPE_PALETTE);
 
     wxImage ref8 = expected8;