From de652d97c06704d2ee2ca4250a881914933cfc8d Mon Sep 17 00:00:00 2001 From: dirk Date: Thu, 26 Nov 2015 13:19:13 +0100 Subject: [PATCH] Added 'bmp3:alpha' option for including the alpha channel when writing an image in the BMP3 format. --- coders/bmp.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/coders/bmp.c b/coders/bmp.c index c21d5e8aa..20e5fa50f 100644 --- a/coders/bmp.c +++ b/coders/bmp.c @@ -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; -- 2.40.0