GraphicsMagick: coders/bmp.c: Writer for BI_PNG compression.
GraphicsMagick Commits <[email protected]> Wed, 27 Sep 2023 16:56:00 -0500
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.4315.1695851768.1961.graphicsmagick-commit@lists.sourceforge.net> |
changeset 3e424bd00b6c in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=3e424bd00b6c summary: coders/bmp.c: Writer for BI_PNG compression. diffstat: ChangeLog | 4 ++++ coders/bmp.c | 35 ++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 9 deletions(-) diffs (95 lines): diff -r d97320e45918 -r 3e424bd00b6c ChangeLog --- a/ChangeLog Sat Sep 23 16:13:36 2023 -0500 +++ b/ChangeLog Wed Sep 27 23:55:25 2023 +0200 @@ -1,3 +1,7 @@ +2023-09-27 Fojtik Jaroslav <[email protected]> + + * coders/bmp.c: Writer for BI_PNG compression. + 2023-09-23 Bob Friesenhahn <[email protected]> * version.sh : Updates for the 1.3.42 release. diff -r d97320e45918 -r 3e424bd00b6c coders/bmp.c --- a/coders/bmp.c Sat Sep 23 16:13:36 2023 -0500 +++ b/coders/bmp.c Wed Sep 27 23:55:25 2023 +0200 @@ -1935,7 +1935,18 @@ } -static int StoreBlobJPG(Image * image, const ImageInfo * image_info) +typedef struct +{ + const char *FormatName; + const char *FormatNameDDot; + const char *Desc; +} TForeignFormatDesc; + +const TForeignFormatDesc StoreDescJPG = {"JPEG", "JPEG:", " Creating jpeg_image."}; +const TForeignFormatDesc StoreDescPNG = {"PNG", "PNG:", " Creating png_image."}; + + +static int StoreAlienBlob(Image * image, const ImageInfo * image_info, const TForeignFormatDesc *pFormatDesc) { ImageInfo *jpeg_image_info; Image *jpeg_image; @@ -1946,15 +1957,14 @@ if(jpeg_image_info == (ImageInfo *) NULL) ThrowWriterException(ResourceLimitError,MemoryAllocationFailed, image); if(image->logging) - (void) LogMagickEvent(CoderEvent,GetMagickModule(), - " Creating jpeg_image."); + (void) LogMagickEvent(CoderEvent,GetMagickModule(), pFormatDesc->Desc); jpeg_image = CloneImage(image,0,0,MagickTrue,&image->exception); - (void)strlcpy(jpeg_image_info->magick,"JPEG",MaxTextExtent); + (void)strlcpy(jpeg_image_info->magick, pFormatDesc->FormatName, MaxTextExtent); (void)strlcpy(jpeg_image_info->filename,"JPEG:",MaxTextExtent); - (void)strlcpy(jpeg_image->magick,"JPEG",MaxTextExtent); - (void)strlcpy(jpeg_image->filename,"JPEG:",MaxTextExtent); + (void)strlcpy(jpeg_image->magick, pFormatDesc->FormatName, MaxTextExtent); + (void)strlcpy(jpeg_image->filename, pFormatDesc->FormatNameDDot, MaxTextExtent); Data = ImageToBlob(jpeg_image_info,jpeg_image,&DataSize,&image->exception); if(Data!=NULL) @@ -2110,6 +2120,13 @@ bmp_info.bits_per_pixel = 0; bmp_info.compression = BI_JPEG; } + else if(type>2 && AccessDefinition(image_info,"bmp","allow-png")) + { + image->compression = ZipCompression; + bmp_info.number_colors = 0; + bmp_info.bits_per_pixel = 0; + bmp_info.compression = BI_PNG; + } else if (image->storage_class == DirectClass) { /* @@ -2159,7 +2176,7 @@ Below emulates: bytes_per_line=4*((image->columns*bmp_info.bits_per_pixel+31)/32); */ - if(bmp_info.compression == BI_JPEG) + if(bmp_info.compression==BI_JPEG || bmp_info.compression==BI_PNG) { bytes_per_line = 0; image_size = 0; @@ -2242,7 +2259,7 @@ /* Convert MIFF to BMP raster pixels. */ - if(bmp_info.compression == BI_JPEG) + if(bmp_info.compression==BI_JPEG || bmp_info.compression==BI_PNG) pixels=NULL; else { @@ -2578,7 +2595,7 @@ } if(pixels==NULL) { - StoreBlobJPG(image,image_info); + StoreAlienBlob(image,image_info, (bmp_info.compression==BI_JPEG)? &StoreDescJPG : &StoreDescPNG); } else {