]> granicus.if.org Git - imagemagick/commitdiff
Fix background.index PNG bug.
authorglennrp <glennrp@git.imagemagick.org>
Mon, 10 May 2010 03:01:59 +0000 (03:01 +0000)
committerglennrp <glennrp@git.imagemagick.org>
Mon, 10 May 2010 03:01:59 +0000 (03:01 +0000)
coders/png.c

index 87836e96234dcf7013f010072e47db077d0fe41d..737d78f099873ffb6ce0e9772660bdcf6456b055 100644 (file)
@@ -7062,12 +7062,13 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
     else
       if (mng_info->IsPalette)
       {
+        unsigned long
+           number_colors;
+
+        number_colors=image_colors;
+
         if (image_depth <= 8)
           {
-            unsigned long
-               number_colors;
-
-            number_colors=image_colors;
             /*
               Set image palette.
             */
@@ -7211,13 +7212,6 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
               }
             }
 
-            /*
-              Identify which colormap entry is the background color.
-            */
-            for (i=0; i < (long) MagickMax(1L*number_colors-1L,1L); i++)
-              if (IsPNGColorEqual(ping_background,image->colormap[i]))
-                break;
-            ping_background.index=(png_byte) i;
           }
       }
     else
@@ -7259,6 +7253,31 @@ static MagickBooleanType WriteOnePNGImage(MngInfo *mng_info,
          ping_trans_color.gray=(png_uint_16) (QuantumScale*(maxval*
            ping_trans_color.gray));
       }
+
+    if ((int) ping_color_type == PNG_COLOR_TYPE_PALETTE)
+      {
+        /*
+           Identify which colormap entry is the background color.
+        */
+
+        unsigned long
+           number_colors;
+
+        number_colors=image_colors;
+
+        for (i=0; i < (long) MagickMax(1L*number_colors-1L,1L); i++)
+          if (IsPNGColorEqual(ping_background,image->colormap[i]))
+            break;
+
+        ping_background.index=(png_byte) i;
+
+        if (logging)
+          (void) LogMagickEvent(CoderEvent,GetMagickModule(),
+            "  Setting up bKGD chunk with index=%d",(int) i);
+
+        png_set_bKGD(ping,ping_info,&ping_background);
+      }
+
   if (logging != MagickFalse)
     (void) LogMagickEvent(CoderEvent,GetMagickModule(),
       "    PNG color type: %d",ping_color_type);