From: cristy Date: Wed, 19 Oct 2011 23:53:34 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~6786 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8a11cb146177680bfc1b7d89a8cd0c8f2befe468;p=imagemagick --- diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp index f7023325e..6178d0ce8 100644 --- a/Magick++/lib/Image.cpp +++ b/Magick++/lib/Image.cpp @@ -538,8 +538,11 @@ void Magick::Image::channel ( const ChannelType channel_ ) void Magick::Image::channelDepth ( const size_t depth_ ) { modifyImage(); - SetImageDepth( image(), depth_); - throwImageException(); + ExceptionInfo exceptionInfo; + GetExceptionInfo( &exceptionInfo ); + SetImageDepth( image(), depth_, &exceptionInfo); + throwException( exceptionInfo ); + (void) DestroyExceptionInfo( &exceptionInfo ); } size_t Magick::Image::channelDepth ( ) { @@ -3429,7 +3432,11 @@ double Magick::Image::meanErrorPerPixel ( void ) const void Magick::Image::modulusDepth ( const size_t depth_ ) { modifyImage(); - SetImageDepth( image(), depth_ ); + ExceptionInfo exceptionInfo; + GetExceptionInfo( &exceptionInfo ); + SetImageDepth( image(), depth_, &exceptionInfo ); + throwException( exceptionInfo ); + (void) DestroyExceptionInfo( &exceptionInfo ); options()->depth( depth_ ); } size_t Magick::Image::modulusDepth ( void ) const diff --git a/Magick++/lib/Magick++/STL.h b/Magick++/lib/Magick++/STL.h index da348f731..cae94d7c1 100644 --- a/Magick++/lib/Magick++/STL.h +++ b/Magick++/lib/Magick++/STL.h @@ -2260,12 +2260,15 @@ namespace Magick // Calculate quantization error if ( measureError_ ) { - MagickCore::GetImageQuantizeError( image ); - if ( image->exception.severity > MagickCore::UndefinedException ) + MagickCore::ExceptionInfo exceptionInfo; + MagickCore::GetExceptionInfo( &exceptionInfo ); + MagickCore::GetImageQuantizeError( image, &exceptionInfo ); + if ( exceptionInfo.severity > MagickCore::UndefinedException ) { unlinkImages( first_, last_ ); throwException( exceptionInfo ); } + (void) MagickCore::DestroyExceptionInfo( &exceptionInfo ); } // Udate DirectClass representation of pixels @@ -2407,7 +2410,7 @@ namespace Magick { // Calculate quantization error if ( measureError_ ) - MagickCore::GetImageQuantizeError( image ); + MagickCore::GetImageQuantizeError( image, &exceptionInfo ); // Update DirectClass representation of pixels MagickCore::SyncImage( image ); diff --git a/MagickCore/attribute.c b/MagickCore/attribute.c index 86cf24ade..168d42dc9 100644 --- a/MagickCore/attribute.c +++ b/MagickCore/attribute.c @@ -372,36 +372,33 @@ MagickExport size_t GetImageDepth(const Image *image, continue; for (x=0; x < (ssize_t) image->columns; x++) { - while (current_depth[id] < MAGICKCORE_QUANTUM_DEPTH) + register ssize_t + i; + + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) { - MagickStatusType - status; + PixelTrait + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + while (current_depth[id] < MAGICKCORE_QUANTUM_DEPTH) + { + MagickStatusType + status; - QuantumAny - range; + QuantumAny + range; - status=0; - range=GetQuantumRange(current_depth[id]); - if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) - status|=GetPixelRed(image,p) != ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelRed(image,p),range),range); - if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) - status|=GetPixelGreen(image,p) != ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelGreen(image,p),range),range); - if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) - status|=GetPixelBlue(image,p) != ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelBlue(image,p),range),range); - if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) && - (image->matte != MagickFalse)) - status|=GetPixelAlpha(image,p) != ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelAlpha(image,p),range),range); - if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && - (image->colorspace == CMYKColorspace)) - status|=GetPixelBlack(image,p) != ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelBlack(image,p),range),range); - if (status == 0) - break; - current_depth[id]++; + status=0; + range=GetQuantumRange(current_depth[id]); + status|=p[i] != ScaleAnyToQuantum(ScaleQuantumToAny(p[i],range), + range); + if (status == 0) + break; + current_depth[id]++; + } } p+=GetPixelChannels(image); } @@ -786,9 +783,8 @@ MagickExport MagickBooleanType IsImageOpaque(const Image *image, % % The format of the SetImageDepth method is: % -% MagickBooleanType SetImageDepth(Image *image,const size_t depth) -% MagickBooleanType SetImageDepth(Image *image, -% const ChannelType channel,const size_t depth) +% MagickBooleanType SetImageDepth(Image *image,const size_t depth, +% ExceptionInfo *exception) % % A description of each parameter follows: % @@ -798,16 +794,15 @@ MagickExport MagickBooleanType IsImageOpaque(const Image *image, % % o depth: the image depth. % +% o exception: return any errors or warnings in this structure. +% */ MagickExport MagickBooleanType SetImageDepth(Image *image, - const size_t depth) + const size_t depth,ExceptionInfo *exception) { CacheView *image_view; - ExceptionInfo - *exception; - MagickBooleanType status; @@ -821,7 +816,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"..."); assert(image->signature == MagickSignature); - if (GetImageDepth(image,&image->exception) <= (size_t) + if (GetImageDepth(image,exception) <= (size_t) MagickMin((double) depth,(double) MAGICKCORE_QUANTUM_DEPTH)) { image->depth=depth; @@ -832,7 +827,6 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, */ status=MagickTrue; range=GetQuantumRange(depth); - exception=(&image->exception); image_view=AcquireCacheView(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(dynamic,4) shared(status) @@ -847,8 +841,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, if (status == MagickFalse) continue; - q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1, - exception); + q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception); if (q == (Quantum *) NULL) { status=MagickFalse; @@ -856,23 +849,19 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, } for (x=0; x < (ssize_t) image->columns; x++) { - if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) - SetPixelRed(image,ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelRed(image,q),range),range),q); - if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) - SetPixelGreen(image,ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelGreen(image,q),range),range),q); - if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) - SetPixelBlue(image,ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelBlue(image,q),range),range),q); - if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && - (image->colorspace == CMYKColorspace)) - SetPixelBlack(image,ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelBlack(image,q),range),range),q); - if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) && - (image->matte != MagickFalse)) - SetPixelAlpha(image,ScaleAnyToQuantum(ScaleQuantumToAny( - GetPixelAlpha(image,q),range),range),q); + register ssize_t + i; + + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelTrait + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + q[i]=ScaleAnyToQuantum(ScaleQuantumToAny(q[i],range),range); + } q+=GetPixelChannels(image); } if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse) diff --git a/MagickCore/attribute.h b/MagickCore/attribute.h index 71f375374..f1c9c10d8 100644 --- a/MagickCore/attribute.h +++ b/MagickCore/attribute.h @@ -32,7 +32,7 @@ extern MagickExport MagickBooleanType IsImageGray(const Image *,ExceptionInfo *), IsImageMonochrome(const Image *,ExceptionInfo *), IsImageOpaque(const Image *,ExceptionInfo *), - SetImageDepth(Image *,const size_t); + SetImageDepth(Image *,const size_t,ExceptionInfo *); extern MagickExport RectangleInfo GetImageBoundingBox(const Image *,ExceptionInfo *exception); diff --git a/MagickCore/composite.c b/MagickCore/composite.c index 77f153ff3..7ce26528f 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -1738,7 +1738,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, Y = green_channel; compose:args = x_scale[,y_scale[,angle]]. */ destination_image=CloneImage(image,image->columns,image->rows,MagickTrue, - &image->exception); + exception); if (destination_image == (Image *) NULL) return(MagickFalse); /* @@ -1784,8 +1784,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, Blur Image by resampling. */ pixel=zero; - exception=(&image->exception); - resample_filter=AcquireResampleFilter(image,&image->exception); + resample_filter=AcquireResampleFilter(image,exception); SetResampleFilter(resample_filter,CubicFilter,2.0); destination_view=AcquireCacheView(destination_image); composite_view=AcquireCacheView(composite_image); @@ -1808,7 +1807,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, p=GetCacheViewVirtualPixels(composite_view,0,y,composite_image->columns, 1,exception); q=QueueCacheViewAuthenticPixels(destination_view,0,y, - destination_image->columns,1,&image->exception); + destination_image->columns,1,exception); if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL)) break; for (x=0; x < (ssize_t) composite_image->columns; x++) @@ -1876,7 +1875,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, compose:args = x_scale[,y_scale[,center.x,center.y]] */ destination_image=CloneImage(image,image->columns,image->rows,MagickTrue, - &image->exception); + exception); if (destination_image == (Image *) NULL) return(MagickFalse); SetGeometryInfo(&geometry_info); @@ -1957,7 +1956,6 @@ MagickExport MagickBooleanType CompositeImage(Image *image, displacement/distortion map. -- Like a lens... */ pixel=zero; - exception=(&image->exception); image_view=AcquireCacheView(image); destination_view=AcquireCacheView(destination_image); composite_view=AcquireCacheView(composite_image); @@ -1980,7 +1978,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image, p=GetCacheViewVirtualPixels(composite_view,0,y,composite_image->columns, 1,exception); q=QueueCacheViewAuthenticPixels(destination_view,0,y, - destination_image->columns,1,&image->exception); + destination_image->columns,1,exception); if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL)) break; for (x=0; x < (ssize_t) composite_image->columns; x++) @@ -2132,7 +2130,6 @@ MagickExport MagickBooleanType CompositeImage(Image *image, progress=0; midpoint=((MagickRealType) QuantumRange+1.0)/2; GetPixelInfo(composite_image,&zero); - exception=(&image->exception); image_view=AcquireCacheView(image); composite_view=AcquireCacheView(composite_image); #if defined(MAGICKCORE_OPENMP_SUPPORT) diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c index 30a0ff7d1..2c713b27d 100644 --- a/MagickCore/enhance.c +++ b/MagickCore/enhance.c @@ -2322,7 +2322,6 @@ MagickExport MagickBooleanType LevelizeImage(Image *image, */ status=MagickTrue; progress=0; - exception=(&image->exception); image_view=AcquireCacheView(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(dynamic,4) shared(progress,status) diff --git a/MagickCore/feature.c b/MagickCore/feature.c index 378e4dd02..6b8fede5b 100644 --- a/MagickCore/feature.c +++ b/MagickCore/feature.c @@ -419,7 +419,7 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, status=MagickFalse; continue; } - p+=distance*GetPixelChannels(image); + p+=distance*GetPixelChannels(image);; for (x=0; x < (ssize_t) image->columns; x++) { for (i=0; i < 4; i++) diff --git a/MagickCore/magick-config.h b/MagickCore/magick-config.h index 7d8c047b5..4de7f9ad5 100644 --- a/MagickCore/magick-config.h +++ b/MagickCore/magick-config.h @@ -441,15 +441,15 @@ #endif /* Define if you have the header file. */ -#ifndef MAGICKCORE_HAVE_LCMS2_H -#define MAGICKCORE_HAVE_LCMS2_H 1 -#endif +/* #undef HAVE_LCMS2_H */ /* Define if you have the header file. */ /* #undef HAVE_LCMS2_LCMS2_H */ /* Define if you have the header file. */ -/* #undef HAVE_LCMS_H */ +#ifndef MAGICKCORE_HAVE_LCMS_H +#define MAGICKCORE_HAVE_LCMS_H 1 +#endif /* Define if you have the header file. */ /* #undef HAVE_LCMS_LCMS_H */ @@ -1203,7 +1203,9 @@ #endif /* Define if you have LQR library */ -/* #undef LQR_DELEGATE */ +#ifndef MAGICKCORE_LQR_DELEGATE +#define MAGICKCORE_LQR_DELEGATE 1 +#endif /* Define if using libltdl to support dynamically loadable modules */ #ifndef MAGICKCORE_LTDL_DELEGATE @@ -1215,7 +1217,7 @@ /* Define to the system default library search path. */ #ifndef MAGICKCORE_LT_DLSEARCH_PATH -#define MAGICKCORE_LT_DLSEARCH_PATH "/lib64:/usr/lib64:/lib:/usr/lib:/usr/lib64/R/lib:/usr/lib64/alliance/lib:/usr/lib64/atlas:/opt/modules/pkg/intel/f77/10.0.025/lib:/usr/lib64/kicad:/usr/lib/llvm:/usr/lib64/llvm:/usr/local/lib:/usr/lib64/mpich2/lib/:/usr/lib64/mysql:/usr/lib64/nvidia:/usr/lib64/octave/3.4.2:/usr/lib64/openmotif:/usr/lib64/qt-3.3/lib:/usr/lib64/tcl8.5/tclx8.4:/usr/lib/wine/:/usr/lib64/wine/:/usr/lib64/xulrunner-2" +#define MAGICKCORE_LT_DLSEARCH_PATH "/lib64:/usr/lib64:/lib:/usr/lib:/usr/lib64/R/lib:/usr/lib64/atlas:/opt/modules/pkg/intel/f77/10.0.025/lib:/opt/intel/lib/intel64:/usr/lib64/llvm:/usr/local/lib:/usr/lib64/mysql:/usr/lib64/nvidia:/usr/lib64/qt-3.3/lib:/usr/lib64/tracker-0.12:/usr/lib64/xulrunner-2" #endif /* The archive extension */ @@ -1477,7 +1479,9 @@ #endif /* Define if you have WEBP library */ -/* #undef WEBP_DELEGATE */ +#ifndef MAGICKCORE_WEBP_DELEGATE +#define MAGICKCORE_WEBP_DELEGATE 1 +#endif /* Define to use the Windows GDI32 library */ /* #undef WINGDI32_DELEGATE */ @@ -1544,9 +1548,7 @@ /* #undef _MINIX */ /* Define this for the OpenCL Accelerator */ -#ifndef MAGICKCORE__OPENCL -#define MAGICKCORE__OPENCL 1 -#endif +/* #undef _OPENCL */ /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c index f453eee5a..a0ad8c9d3 100644 --- a/MagickCore/quantize.c +++ b/MagickCore/quantize.c @@ -330,7 +330,7 @@ static NodeInfo static MagickBooleanType AssignImageColors(Image *,CubeInfo *,ExceptionInfo *), ClassifyImageColors(CubeInfo *,const Image *,ExceptionInfo *), - DitherImage(Image *,CubeInfo *), + DitherImage(Image *,CubeInfo *,ExceptionInfo *), SetGrayscaleImage(Image *,ExceptionInfo *); static size_t @@ -529,7 +529,7 @@ static MagickBooleanType AssignImageColors(Image *image,CubeInfo *cube_info, */ if ((cube_info->quantize_info->dither != MagickFalse) && (cube_info->quantize_info->dither_method != NoDitherMethod)) - (void) DitherImage(image,cube_info); + (void) DitherImage(image,cube_info,exception); else { CacheView @@ -542,7 +542,6 @@ static MagickBooleanType AssignImageColors(Image *image,CubeInfo *cube_info, status; status=MagickTrue; - exception=(&image->exception); image_view=AcquireCacheView(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(dynamic,4) shared(status) @@ -649,7 +648,7 @@ static MagickBooleanType AssignImageColors(Image *image,CubeInfo *cube_info, image_view=DestroyCacheView(image_view); } if (cube_info->quantize_info->measure_error != MagickFalse) - (void) GetImageQuantizeError(image); + (void) GetImageQuantizeError(image,exception); if ((cube_info->quantize_info->number_colors == 2) && (cube_info->quantize_info->colorspace == GRAYColorspace)) { @@ -1181,7 +1180,7 @@ MagickExport MagickBooleanType CompressImageColormap(Image *image, assert(image->signature == MagickSignature); if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); - if (IsPaletteImage(image,&image->exception) == MagickFalse) + if (IsPaletteImage(image,exception) == MagickFalse) return(MagickFalse); GetQuantizeInfo(&quantize_info); quantize_info.number_colors=image->colors; @@ -1398,7 +1397,8 @@ MagickExport QuantizeInfo *DestroyQuantizeInfo(QuantizeInfo *quantize_info) % % The format of the DitherImage method is: % -% MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info) +% MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info, +% ExceptionInfo *exception) % % A description of each parameter follows. % @@ -1406,6 +1406,8 @@ MagickExport QuantizeInfo *DestroyQuantizeInfo(QuantizeInfo *quantize_info) % % o cube_info: A pointer to the Cube structure. % +% o exception: return any errors or warnings in this structure. +% */ static RealPixelInfo **DestroyPixelThreadSet(RealPixelInfo **pixels) @@ -1469,16 +1471,14 @@ static inline ssize_t CacheOffset(CubeInfo *cube_info, return(offset); } -static MagickBooleanType FloydSteinbergDither(Image *image,CubeInfo *cube_info) +static MagickBooleanType FloydSteinbergDither(Image *image,CubeInfo *cube_info, + ExceptionInfo *exception) { #define DitherImageTag "Dither/Image" CacheView *image_view; - ExceptionInfo - *exception; - MagickBooleanType status; @@ -1494,7 +1494,6 @@ static MagickBooleanType FloydSteinbergDither(Image *image,CubeInfo *cube_info) pixels=AcquirePixelThreadSet(image->columns); if (pixels == (RealPixelInfo **) NULL) return(MagickFalse); - exception=(&image->exception); status=MagickTrue; image_view=AcquireCacheView(image); for (y=0; y < (ssize_t) image->rows; y++) @@ -1662,40 +1661,53 @@ static MagickBooleanType FloydSteinbergDither(Image *image,CubeInfo *cube_info) } static MagickBooleanType - RiemersmaDither(Image *,CacheView *,CubeInfo *,const unsigned int); + RiemersmaDither(Image *,CacheView *,CubeInfo *,const unsigned int, + ExceptionInfo *exception); static void Riemersma(Image *image,CacheView *image_view,CubeInfo *cube_info, - const size_t level,const unsigned int direction) + const size_t level,const unsigned int direction,ExceptionInfo *exception) { if (level == 1) switch (direction) { case WestGravity: { - (void) RiemersmaDither(image,image_view,cube_info,EastGravity); - (void) RiemersmaDither(image,image_view,cube_info,SouthGravity); - (void) RiemersmaDither(image,image_view,cube_info,WestGravity); + (void) RiemersmaDither(image,image_view,cube_info,EastGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,SouthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,WestGravity, + exception); break; } case EastGravity: { - (void) RiemersmaDither(image,image_view,cube_info,WestGravity); - (void) RiemersmaDither(image,image_view,cube_info,NorthGravity); - (void) RiemersmaDither(image,image_view,cube_info,EastGravity); + (void) RiemersmaDither(image,image_view,cube_info,WestGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,NorthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,EastGravity, + exception); break; } case NorthGravity: { - (void) RiemersmaDither(image,image_view,cube_info,SouthGravity); - (void) RiemersmaDither(image,image_view,cube_info,EastGravity); - (void) RiemersmaDither(image,image_view,cube_info,NorthGravity); + (void) RiemersmaDither(image,image_view,cube_info,SouthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,EastGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,NorthGravity, + exception); break; } case SouthGravity: { - (void) RiemersmaDither(image,image_view,cube_info,NorthGravity); - (void) RiemersmaDither(image,image_view,cube_info,WestGravity); - (void) RiemersmaDither(image,image_view,cube_info,SouthGravity); + (void) RiemersmaDither(image,image_view,cube_info,NorthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,WestGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,SouthGravity, + exception); break; } default: @@ -1706,46 +1718,74 @@ static void Riemersma(Image *image,CacheView *image_view,CubeInfo *cube_info, { case WestGravity: { - Riemersma(image,image_view,cube_info,level-1,NorthGravity); - (void) RiemersmaDither(image,image_view,cube_info,EastGravity); - Riemersma(image,image_view,cube_info,level-1,WestGravity); - (void) RiemersmaDither(image,image_view,cube_info,SouthGravity); - Riemersma(image,image_view,cube_info,level-1,WestGravity); - (void) RiemersmaDither(image,image_view,cube_info,WestGravity); - Riemersma(image,image_view,cube_info,level-1,SouthGravity); + Riemersma(image,image_view,cube_info,level-1,NorthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,EastGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,WestGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,SouthGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,WestGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,WestGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,SouthGravity, + exception); break; } case EastGravity: { - Riemersma(image,image_view,cube_info,level-1,SouthGravity); - (void) RiemersmaDither(image,image_view,cube_info,WestGravity); - Riemersma(image,image_view,cube_info,level-1,EastGravity); - (void) RiemersmaDither(image,image_view,cube_info,NorthGravity); - Riemersma(image,image_view,cube_info,level-1,EastGravity); - (void) RiemersmaDither(image,image_view,cube_info,EastGravity); - Riemersma(image,image_view,cube_info,level-1,NorthGravity); + Riemersma(image,image_view,cube_info,level-1,SouthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,WestGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,EastGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,NorthGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,EastGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,EastGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,NorthGravity, + exception); break; } case NorthGravity: { - Riemersma(image,image_view,cube_info,level-1,WestGravity); - (void) RiemersmaDither(image,image_view,cube_info,SouthGravity); - Riemersma(image,image_view,cube_info,level-1,NorthGravity); - (void) RiemersmaDither(image,image_view,cube_info,EastGravity); - Riemersma(image,image_view,cube_info,level-1,NorthGravity); - (void) RiemersmaDither(image,image_view,cube_info,NorthGravity); - Riemersma(image,image_view,cube_info,level-1,EastGravity); + Riemersma(image,image_view,cube_info,level-1,WestGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,SouthGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,NorthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,EastGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,NorthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,NorthGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,EastGravity, + exception); break; } case SouthGravity: { - Riemersma(image,image_view,cube_info,level-1,EastGravity); - (void) RiemersmaDither(image,image_view,cube_info,NorthGravity); - Riemersma(image,image_view,cube_info,level-1,SouthGravity); - (void) RiemersmaDither(image,image_view,cube_info,WestGravity); - Riemersma(image,image_view,cube_info,level-1,SouthGravity); - (void) RiemersmaDither(image,image_view,cube_info,SouthGravity); - Riemersma(image,image_view,cube_info,level-1,WestGravity); + Riemersma(image,image_view,cube_info,level-1,EastGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,NorthGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,SouthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,WestGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,SouthGravity, + exception); + (void) RiemersmaDither(image,image_view,cube_info,SouthGravity, + exception); + Riemersma(image,image_view,cube_info,level-1,WestGravity, + exception); break; } default: @@ -1754,7 +1794,7 @@ static void Riemersma(Image *image,CacheView *image_view,CubeInfo *cube_info, } static MagickBooleanType RiemersmaDither(Image *image,CacheView *image_view, - CubeInfo *cube_info,const unsigned int direction) + CubeInfo *cube_info,const unsigned int direction,ExceptionInfo *exception) { #define DitherImageTag "Dither/Image" @@ -1775,9 +1815,6 @@ static MagickBooleanType RiemersmaDither(Image *image,CacheView *image_view, if ((p->x >= 0) && (p->x < (ssize_t) image->columns) && (p->y >= 0) && (p->y < (ssize_t) image->rows)) { - ExceptionInfo - *exception; - register Quantum *restrict q; @@ -1787,7 +1824,6 @@ static MagickBooleanType RiemersmaDither(Image *image,CacheView *image_view, /* Distribute error. */ - exception=(&image->exception); q=GetCacheViewAuthenticPixels(image_view,p->x,p->y,1,1,exception); if (q == (Quantum *) NULL) return(MagickFalse); @@ -1891,7 +1927,8 @@ static inline ssize_t MagickMin(const ssize_t x,const ssize_t y) return(y); } -static MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info) +static MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info, + ExceptionInfo *exception) { CacheView *image_view; @@ -1906,7 +1943,7 @@ static MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info) depth; if (cube_info->quantize_info->dither_method != RiemersmaDitherMethod) - return(FloydSteinbergDither(image,cube_info)); + return(FloydSteinbergDither(image,cube_info,exception)); /* Distribute quantization error along a Hilbert curve. */ @@ -1923,8 +1960,8 @@ static MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info) cube_info->span=(MagickSizeType) image->columns*image->rows; image_view=AcquireCacheView(image); if (depth > 1) - Riemersma(image,image_view,cube_info,depth-1,NorthGravity); - status=RiemersmaDither(image,image_view,cube_info,ForgetGravity); + Riemersma(image,image_view,cube_info,depth-1,NorthGravity,exception); + status=RiemersmaDither(image,image_view,cube_info,ForgetGravity,exception); image_view=DestroyCacheView(image_view); return(status); } @@ -2136,21 +2173,22 @@ static NodeInfo *GetNodeInfo(CubeInfo *cube_info,const size_t id, % % The format of the GetImageQuantizeError method is: % -% MagickBooleanType GetImageQuantizeError(Image *image) +% MagickBooleanType GetImageQuantizeError(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 GetImageQuantizeError(Image *image) +MagickExport MagickBooleanType GetImageQuantizeError(Image *image, + ExceptionInfo *exception) { CacheView *image_view; - ExceptionInfo - *exception; - MagickRealType alpha, area, @@ -2170,7 +2208,7 @@ MagickExport MagickBooleanType GetImageQuantizeError(Image *image) assert(image->signature == MagickSignature); if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); - image->total_colors=GetNumberColors(image,(FILE *) NULL,&image->exception); + image->total_colors=GetNumberColors(image,(FILE *) NULL,exception); (void) ResetMagickMemory(&image->error,0,sizeof(image->error)); if (image->storage_class == DirectClass) return(MagickTrue); @@ -2180,7 +2218,6 @@ MagickExport MagickBooleanType GetImageQuantizeError(Image *image) maximum_error=0.0; mean_error_per_pixel=0.0; mean_error=0.0; - exception=(&image->exception); image_view=AcquireCacheView(image); for (y=0; y < (ssize_t) image->rows; y++) { @@ -2696,8 +2733,8 @@ MagickExport MagickBooleanType QuantizeImage(const QuantizeInfo *quantize_info, 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) && + (void) DirectToColormapImage(image,exception); + if ((IsImageGray(image,exception) != MagickFalse) && (image->matte == MagickFalse)) (void) SetGrayscaleImage(image,exception); if ((image->storage_class == PseudoClass) && @@ -2727,7 +2764,7 @@ MagickExport MagickBooleanType QuantizeImage(const QuantizeInfo *quantize_info, if (cube_info == (CubeInfo *) NULL) ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", image->filename); - status=ClassifyImageColors(cube_info,image,&image->exception); + status=ClassifyImageColors(cube_info,image,exception); if (status != MagickFalse) { /* @@ -2835,7 +2872,7 @@ MagickExport MagickBooleanType QuantizeImages(const QuantizeInfo *quantize_info, cube_info=GetCubeInfo(quantize_info,depth,maximum_colors); if (cube_info == (CubeInfo *) NULL) { - (void) ThrowMagickException(&images->exception,GetMagickModule(), + (void) ThrowMagickException(exception,GetMagickModule(), ResourceLimitError,"MemoryAllocationFailed","`%s'",images->filename); return(MagickFalse); } @@ -2845,7 +2882,7 @@ MagickExport MagickBooleanType QuantizeImages(const QuantizeInfo *quantize_info, { progress_monitor=SetImageProgressMonitor(image,(MagickProgressMonitor) NULL, image->client_data); - status=ClassifyImageColors(cube_info,image,&image->exception); + status=ClassifyImageColors(cube_info,image,exception); if (status == MagickFalse) break; (void) SetImageProgressMonitor(image,progress_monitor,image->client_data); @@ -3074,7 +3111,7 @@ MagickExport MagickBooleanType RemapImage(const QuantizeInfo *quantize_info, if (cube_info == (CubeInfo *) NULL) ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", image->filename); - status=ClassifyImageColors(cube_info,remap_image,&image->exception); + status=ClassifyImageColors(cube_info,remap_image,exception); if (status != MagickFalse) { /* @@ -3362,7 +3399,7 @@ static MagickBooleanType SetGrayscaleImage(Image *image, image_view=DestroyCacheView(image_view); colormap_index=(ssize_t *) RelinquishMagickMemory(colormap_index); image->type=GrayscaleType; - if (IsImageMonochrome(image,&image->exception) != MagickFalse) + if (IsImageMonochrome(image,exception) != MagickFalse) image->type=BilevelType; return(status); } diff --git a/MagickCore/quantize.h b/MagickCore/quantize.h index 445c40d68..b6e732a01 100644 --- a/MagickCore/quantize.h +++ b/MagickCore/quantize.h @@ -58,7 +58,7 @@ typedef struct _QuantizeInfo extern MagickExport MagickBooleanType CompressImageColormap(Image *,ExceptionInfo *), - GetImageQuantizeError(Image *), + GetImageQuantizeError(Image *,ExceptionInfo *), PosterizeImage(Image *,const size_t,const MagickBooleanType,ExceptionInfo *), QuantizeImage(const QuantizeInfo *,Image *,ExceptionInfo *), QuantizeImages(const QuantizeInfo *,Image *,ExceptionInfo *), diff --git a/MagickCore/version.h b/MagickCore/version.h index c628fa09a..c4ebbb399 100644 --- a/MagickCore/version.h +++ b/MagickCore/version.h @@ -34,7 +34,7 @@ extern "C" { #define MagickLibAddendum "-0" #define MagickLibInterface 7 #define MagickLibMinInterface 7 -#define MagickReleaseDate "2011-10-18" +#define MagickReleaseDate "2011-10-19" #define MagickChangeDate "20110801" #define MagickAuthoritativeURL "http://www.imagemagick.org" #if defined(MAGICKCORE_OPENMP_SUPPORT) diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c index 78364c6d7..5283cfe57 100644 --- a/MagickWand/magick-image.c +++ b/MagickWand/magick-image.c @@ -9069,7 +9069,7 @@ WandExport MagickBooleanType MagickSetImageDepth(MagickWand *wand, (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); if (wand->images == (Image *) NULL) ThrowWandException(WandError,"ContainsNoImages",wand->name); - return(SetImageDepth(wand->images,depth)); + return(SetImageDepth(wand->images,depth,wand->exception)); } /* diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index ef122d9e8..7d8e0fffc 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -1290,10 +1290,11 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, (void) SyncImageSettings(mogrify_info,*image); if (*option == '+') { - (void) SetImageDepth(*image,MAGICKCORE_QUANTUM_DEPTH); + (void) SetImageDepth(*image,MAGICKCORE_QUANTUM_DEPTH,exception); break; } - (void) SetImageDepth(*image,StringToUnsignedLong(argv[i+1])); + (void) SetImageDepth(*image,StringToUnsignedLong(argv[i+1]), + exception); break; } if (LocaleCompare("deskew",option+1) == 0) diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs index 73e70d4b2..4ca2b933a 100644 --- a/PerlMagick/Magick.xs +++ b/PerlMagick/Magick.xs @@ -1369,7 +1369,7 @@ static void SetAttribute(pTHX_ struct PackageInfo *info,Image *image, if (info) info->image_info->depth=SvIV(sval); for ( ; image; image=image->next) - (void) SetImageDepth(image,SvIV(sval)); + (void) SetImageDepth(image,SvIV(sval),exception); break; } if (LocaleCompare(attribute,"dispose") == 0) diff --git a/coders/tiff.c b/coders/tiff.c index 2a8e17b98..23637f5bd 100644 --- a/coders/tiff.c +++ b/coders/tiff.c @@ -2715,7 +2715,7 @@ static MagickBooleanType WriteTIFFImage(const ImageInfo *image_info, case JPEGCompression: { (void) SetImageStorageClass(image,DirectClass,exception); - (void) SetImageDepth(image,8); + (void) SetImageDepth(image,8,exception); break; } default: @@ -2740,7 +2740,7 @@ static MagickBooleanType WriteTIFFImage(const ImageInfo *image_info, photometric=PHOTOMETRIC_YCBCR; (void) TIFFSetField(tiff,TIFFTAG_YCBCRSUBSAMPLING,1,1); (void) SetImageStorageClass(image,DirectClass,exception); - (void) SetImageDepth(image,8); + (void) SetImageDepth(image,8,exception); } else { diff --git a/tests/validate.c b/tests/validate.c index 9dd72af7f..0f45f86c1 100644 --- a/tests/validate.c +++ b/tests/validate.c @@ -524,7 +524,6 @@ static size_t ValidateImageFormatsInMemory(ImageInfo *image_info, (void) FormatLocaleString(reference_image->filename,MaxTextExtent,"%s:%s", reference_formats[i].magick,output_filename); status=SetImageType(reference_image,reference_types[j].type,exception); - InheritException(exception,&reference_image->exception); if (status == MagickFalse) { (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n", @@ -533,8 +532,7 @@ static size_t ValidateImageFormatsInMemory(ImageInfo *image_info, reference_image=DestroyImage(reference_image); continue; } - status=SetImageDepth(reference_image,reference_types[j].depth); - InheritException(exception,&reference_image->exception); + status=SetImageDepth(reference_image,reference_types[j].depth,exception); if (status == MagickFalse) { (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n", @@ -742,7 +740,6 @@ static size_t ValidateImageFormatsOnDisk(ImageInfo *image_info, (void) FormatLocaleString(reference_image->filename,MaxTextExtent,"%s:%s", reference_formats[i].magick,output_filename); status=SetImageType(reference_image,reference_types[j].type,exception); - InheritException(exception,&reference_image->exception); if (status == MagickFalse) { (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n", @@ -751,8 +748,7 @@ static size_t ValidateImageFormatsOnDisk(ImageInfo *image_info, reference_image=DestroyImage(reference_image); continue; } - status=SetImageDepth(reference_image,reference_types[j].depth); - InheritException(exception,&reference_image->exception); + status=SetImageDepth(reference_image,reference_types[j].depth,exception); if (status == MagickFalse) { (void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n", @@ -992,7 +988,6 @@ static size_t ValidateImportExportPixels(ImageInfo *image_info, status=ImportImagePixels(reconstruct_image,0,0,reconstruct_image->columns, reconstruct_image->rows,reference_map[i],reference_storage[j].type, pixels,exception); - InheritException(exception,&reconstruct_image->exception); pixels=(unsigned char *) RelinquishMagickMemory(pixels); if (status == MagickFalse) {