]> granicus.if.org Git - imagemagick/commitdiff
Added 'bmp3:alpha' option for including the alpha channel when writing an image in...
authordirk <dirk@git.imagemagick.org>
Thu, 26 Nov 2015 12:19:13 +0000 (13:19 +0100)
committerdirk <dirk@git.imagemagick.org>
Thu, 26 Nov 2015 12:19:13 +0000 (13:19 +0100)
coders/bmp.c

index c21d5e8aacce995c6ed3f9346f6221df7b4ee8c0..20e5fa50f2380dfc6408802c4462db3a6f03c81c 100644 (file)
@@ -1517,9 +1517,9 @@ static MagickBooleanType WriteBMPImage(const ImageInfo *image_info,Image *image,
 {
   BMPInfo
     bmp_info;
-  const char
-    *value;
 
+  const char
+    *option;
 
   const StringInfo
     *profile;
@@ -1576,18 +1576,17 @@ static MagickBooleanType WriteBMPImage(const ImageInfo *image_info,Image *image,
     if (LocaleCompare(image_info->magick,"BMP3") == 0)
       type=3;
 
-  value=GetImageOption(image_info,"bmp:format");
-
-  if (value != (char *) NULL)
+  option=GetImageOption(image_info,"bmp:format");
+  if (option != (char *) NULL)
     {
       (void) LogMagickEvent(CoderEvent,GetMagickModule(),
-          "  Format=%s",value);
+          "  Format=%s",option);
 
-      if (LocaleCompare(value,"bmp2") == 0)
+      if (LocaleCompare(option,"bmp2") == 0)
         type=2;
-      if (LocaleCompare(value,"bmp3") == 0)
+      if (LocaleCompare(option,"bmp3") == 0)
         type=3;
-      if (LocaleCompare(value,"bmp4") == 0)
+      if (LocaleCompare(option,"bmp4") == 0)
         type=4;
     }
 
@@ -1649,6 +1648,12 @@ static MagickBooleanType WriteBMPImage(const ImageInfo *image_info,Image *image,
           ((type > 3) && (image->alpha_trait != UndefinedPixelTrait) ? 32 : 24);
         bmp_info.compression=(unsigned int) ((type > 3) &&
           (image->alpha_trait != UndefinedPixelTrait) ?  BI_BITFIELDS : BI_RGB);
+        if ((type == 3) && (image->alpha_trait != UndefinedPixelTrait))
+          {
+            option=GetImageOption(image_info,"bmp3:alpha");
+            if (IsStringTrue(option))
+              bmp_info.bits_per_pixel=32;
+          }
       }
     bytes_per_line=4*((image->columns*bmp_info.bits_per_pixel+31)/32);
     bmp_info.ba_offset=0;