From: cristy Date: Fri, 12 Aug 2011 12:38:05 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~7188 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5f7dca64b5c737816e816c8c1877a9ca87792cf7;p=imagemagick --- diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c index 2c928b376..85c648855 100644 --- a/MagickCore/quantize.c +++ b/MagickCore/quantize.c @@ -2603,6 +2603,69 @@ static void PruneToCubeDepth(const Image *image,CubeInfo *cube_info, % o image: the image. % */ + +static MagickBooleanType DirectToColormapImage(Image *image, + ExceptionInfo *exception) +{ + CacheView + *image_view; + + MagickBooleanType + status; + + register ssize_t + i; + + size_t + number_colors; + + ssize_t + y; + + status=MagickTrue; + number_colors=(size_t) (image->columns*image->rows); + if (AcquireImageColormap(image,number_colors) == MagickFalse) + ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", + image->filename); + if (image->colors != number_colors) + return(MagickFalse); + i=0; + image_view=AcquireCacheView(image); + for (y=0; y < (ssize_t) image->rows; y++) + { + MagickBooleanType + proceed; + + register Quantum + *restrict q; + + register ssize_t + x; + + q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); + if (q == (Quantum *) NULL) + break; + for (x=0; x < (ssize_t) image->columns; x++) + { + image->colormap[i].red=GetPixelRed(image,q); + image->colormap[i].green=GetPixelGreen(image,q); + image->colormap[i].blue=GetPixelBlue(image,q); + image->colormap[i].alpha=GetPixelAlpha(image,q); + SetPixelIndex(image,(Quantum) i,q); + i++; + q+=GetPixelChannels(image); + } + if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) + break; + proceed=SetImageProgress(image,AssignImageTag,(MagickOffsetType) y, + image->rows); + if (proceed == MagickFalse) + status=MagickFalse; + } + image_view=DestroyCacheView(image_view); + return(status); +} + MagickExport MagickBooleanType QuantizeImage(const QuantizeInfo *quantize_info, Image *image) { @@ -2627,6 +2690,8 @@ MagickExport MagickBooleanType QuantizeImage(const QuantizeInfo *quantize_info, maximum_colors=MaxColormapSize; if (maximum_colors > MaxColormapSize) maximum_colors=MaxColormapSize; + if ((image->columns*image->rows) <= maximum_colors) + (void) DirectToColormapImage(image,&image->exception); if ((IsImageGray(image,&image->exception) != MagickFalse) && (image->matte == MagickFalse)) (void) SetGrayscaleImage(image);