From: Cristy Date: Sat, 27 Jan 2018 18:42:06 +0000 (-0500) Subject: ... X-Git-Tag: 7.0.7-23~258 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2678d94553a454ae3c426c0910ef33f36f4b062d;p=imagemagick ... --- diff --git a/MagickCore/image.c b/MagickCore/image.c index 2d887944a..16ee18280 100644 --- a/MagickCore/image.c +++ b/MagickCore/image.c @@ -2205,6 +2205,81 @@ MagickExport MagickBooleanType ResetImagePage(Image *image,const char *page) % % % % % % +% R e s e t I m a g e P i x e l s % +% % +% % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ResetImagePixels() reset the image pixels, that is, all the pixel components +% are zereod. +% +% The format of the SetImage method is: +% +% MagickBooleanType ResetImagePixels(Image *image, +% ExceptionInfo *exception) +% +% A description of each parameter follows: +% +% o image: the image. +% +% o exception: return any errors or warnings in this structure. +% +*/ +MagickExport MagickBooleanType ResetImagePixels(Image *image, + ExceptionInfo *exception) +{ + CacheView + *image_view; + + MagickBooleanType + status; + + ssize_t + y; + + assert(image != (Image *) NULL); + if (image->debug != MagickFalse) + (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); + assert(image->signature == MagickCoreSignature); + /* + Reset image pixels. + */ + status=MagickTrue; + image_view=AcquireAuthenticCacheView(image,exception); + for (y=0; y < (ssize_t) image->rows; y++) + { + register Quantum + *magick_restrict q; + + register ssize_t + x; + + if (status == MagickFalse) + continue; + q=QueueCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); + if (q == (Quantum *) NULL) + { + status=MagickFalse; + continue; + } + for (x=0; x < (ssize_t) image->columns; x++) + { + memset(q,0,GetPixelChannels(image)*sizeof(Quantum)); + q+=GetPixelChannels(image); + } + if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) + status=MagickFalse; + } + image_view=DestroyCacheView(image_view); + return(status); +} + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % % S e t I m a g e A l p h a % % % % % diff --git a/MagickCore/image.h b/MagickCore/image.h index d464e1fa9..f5415ebf7 100644 --- a/MagickCore/image.h +++ b/MagickCore/image.h @@ -536,6 +536,7 @@ extern MagickExport MagickBooleanType ListMagickInfo(FILE *,ExceptionInfo *), ModifyImage(Image **,ExceptionInfo *), ResetImagePage(Image *,const char *), + ResetImagePixels(Image *,ExceptionInfo *), SetImageAlpha(Image *,const Quantum,ExceptionInfo *), SetImageBackgroundColor(Image *,ExceptionInfo *), SetImageColor(Image *,const PixelInfo *,ExceptionInfo *), diff --git a/coders/viff.c b/coders/viff.c index 0ce2059bd..b7f54e415 100644 --- a/coders/viff.c +++ b/coders/viff.c @@ -331,6 +331,10 @@ static Image *ReadVIFFImage(const ImageInfo *image_info, image->rows=viff_info.columns; image->depth=viff_info.x_bits_per_pixel <= 8 ? 8UL : MAGICKCORE_QUANTUM_DEPTH; + status=SetImageExtent(image,image->columns,image->rows,exception); + if (status == MagickFalse) + return(DestroyImageList(image)); + (void) SetImageBackgroundColor(image,exception); /* Verify that we can read this VIFF image. */ @@ -512,10 +516,6 @@ static Image *ReadVIFFImage(const ImageInfo *image_info, } if ((bytes_per_pixel*max_packets) > GetBlobSize(image)) ThrowReaderException(CorruptImageError,"ImproperImageHeader"); - status=SetImageExtent(image,image->columns,image->rows,exception); - if (status == MagickFalse) - return(DestroyImageList(image)); - (void) SetImageBackgroundColor(image,exception); pixels=(unsigned char *) AcquireQuantumMemory(MagickMax(number_pixels, max_packets),bytes_per_pixel*sizeof(*pixels)); if (pixels == (unsigned char *) NULL)