From: cristy Date: Fri, 22 Jun 2012 12:06:04 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~5371 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=03a398b6bf904ae4d964937464f1fef1d951e971;p=imagemagick --- diff --git a/MagickCore/nt-feature.c b/MagickCore/nt-feature.c index 209dd578d..dc05af785 100644 --- a/MagickCore/nt-feature.c +++ b/MagickCore/nt-feature.c @@ -289,7 +289,6 @@ MagickExport MagickBooleanType NTLoadTypeLists(SplayTreeInfo *type_list, LONG res; - int list_entries = 0; diff --git a/coders/gif.c b/coders/gif.c index 27efed5b2..ccef064a4 100644 --- a/coders/gif.c +++ b/coders/gif.c @@ -68,6 +68,7 @@ #include "MagickCore/quantum-private.h" #include "MagickCore/static.h" #include "MagickCore/string_.h" +#include "MagickCore/string-private.h" #include "MagickCore/module.h" /* @@ -1051,7 +1052,6 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) /* GIF Extension block. */ - count=ReadBlob(image,1,&c); if (count != 1) { @@ -1135,7 +1135,8 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) MagickBooleanType i8bim, icc, - iptc; + iptc, + magick; StringInfo *profile; @@ -1146,10 +1147,12 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) /* Store GIF application extension as a generic profile. */ - i8bim=LocaleNCompare((char *) header,"MGK8BIM0000",11) == 0 ? - MagickTrue : MagickFalse; icc=LocaleNCompare((char *) header,"ICCRGBG1012",11) == 0 ? MagickTrue : MagickFalse; + magick=LocaleNCompare((char *) header,"ImageMagick",11) == 0 ? + MagickTrue : MagickFalse; + i8bim=LocaleNCompare((char *) header,"MGK8BIM0000",11) == 0 ? + MagickTrue : MagickFalse; iptc=LocaleNCompare((char *) header,"MGKIPTC0000",11) == 0 ? MagickTrue : MagickFalse; number_extensionss++; @@ -1181,17 +1184,23 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) if (profile == (StringInfo *) NULL) ThrowReaderException(ResourceLimitError, "MemoryAllocationFailed"); - info=(unsigned char *) RelinquishMagickMemory(info); if (i8bim == MagickTrue) (void) CopyMagickString(name,"8bim",sizeof(name)); else if (icc == MagickTrue) (void) CopyMagickString(name,"icc",sizeof(name)); else if (iptc == MagickTrue) (void) CopyMagickString(name,"iptc",sizeof(name)); + else if (magick == MagickTrue) + { + (void) CopyMagickString(name,"magick",sizeof(name)); + image->gamma=StringToDouble((char *) info+6,(char **) NULL); + } else (void) FormatLocaleString(name,sizeof(name),"gif:%.11s", header); - (void) SetImageProfile(image,name,profile,exception); + info=(unsigned char *) RelinquishMagickMemory(info); + if (magick == MagickFalse) + (void) SetImageProfile(image,name,profile,exception); profile=DestroyStringInfo(profile); (void) LogMagickEvent(CoderEvent,GetMagickModule(), " profile name=%s",name); @@ -1326,7 +1335,7 @@ static Image *ReadGIFImage(const ImageInfo *image_info,ExceptionInfo *exception) if ((image->colormap[i].red != image->colormap[i].green) || (image->colormap[i].green != image->colormap[i].blue)) break; - if (i == (ssize_t) image->colors) + if ((i == (ssize_t) image->colors) && (image->gamma == 1.0)) SetImageColorspace(image,GRAYColorspace,exception); if ((image_info->ping != MagickFalse) && (image_info->number_scenes != 0)) if (image->scene >= (image_info->scene+image_info->number_scenes-1)) @@ -1692,8 +1701,8 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, count; /* - Write Comment extension. - */ + Write comment extension. + */ (void) WriteBlobByte(image,(unsigned char) 0x21); (void) WriteBlobByte(image,(unsigned char) 0xfe); value=GetImageProperty(image,"comment",exception); @@ -1724,6 +1733,29 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, (void) WriteBlobLSBShort(image,(unsigned short) image->iterations); (void) WriteBlobByte(image,(unsigned char) 0x00); } + if ((image->gamma != 1.0f/2.2f)) + { + char + attributes[MaxTextExtent]; + + ssize_t + length; + + /* + Write ImageMagick extension. + */ + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + " Writing GIF Extension %s","ImageMagick"); + (void) WriteBlobByte(image,(unsigned char) 0x21); + (void) WriteBlobByte(image,(unsigned char) 0xff); + (void) WriteBlobByte(image,(unsigned char) 0x0b); + (void) WriteBlob(image,11,(unsigned char *) "ImageMagick"); + length=FormatLocaleString(attributes,MaxTextExtent,"gamma=%g", + image->gamma); + (void) WriteBlobByte(image,(unsigned char) length); + (void) WriteBlob(image,length,(unsigned char *) attributes); + (void) WriteBlobByte(image,(unsigned char) 0x00); + } ResetImageProfileIterator(image); for ( ; ; ) { @@ -1765,7 +1797,7 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, /* Write ICC extension. */ - (void) WriteBlob(image,11,(unsigned char *)"ICCRGBG1012"); + (void) WriteBlob(image,11,(unsigned char *) "ICCRGBG1012"); (void) LogMagickEvent(CoderEvent,GetMagickModule(), " Writing GIF Extension %s","ICCRGBG1012"); } @@ -1773,9 +1805,9 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, if ((LocaleCompare(name,"IPTC") == 0)) { /* - write IPTC extension. + Write IPTC extension. */ - (void) WriteBlob(image,11,(unsigned char *)"MGKIPTC0000"); + (void) WriteBlob(image,11,(unsigned char *) "MGKIPTC0000"); (void) LogMagickEvent(CoderEvent,GetMagickModule(), " Writing GIF Extension %s","MGKIPTC0000"); } @@ -1783,7 +1815,7 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, if ((LocaleCompare(name,"8BIM") == 0)) { /* - Write 8BIM extension> + Write 8BIM extension. */ (void) WriteBlob(image,11,(unsigned char *) "MGK8BIM0000"); @@ -1795,7 +1827,9 @@ static MagickBooleanType WriteGIFImage(const ImageInfo *image_info,Image *image, char extension[MaxTextExtent]; - /* write generic extension */ + /* + Write generic extension. + */ (void) CopyMagickString(extension,name+4, sizeof(extension)); (void) WriteBlob(image,11,(unsigned char *) extension);