]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 19 Oct 2011 23:53:34 +0000 (23:53 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 19 Oct 2011 23:53:34 +0000 (23:53 +0000)
16 files changed:
Magick++/lib/Image.cpp
Magick++/lib/Magick++/STL.h
MagickCore/attribute.c
MagickCore/attribute.h
MagickCore/composite.c
MagickCore/enhance.c
MagickCore/feature.c
MagickCore/magick-config.h
MagickCore/quantize.c
MagickCore/quantize.h
MagickCore/version.h
MagickWand/magick-image.c
MagickWand/mogrify.c
PerlMagick/Magick.xs
coders/tiff.c
tests/validate.c

index f7023325eb364107085c194fde410661e45ce479..6178d0ce812746656abed92534b2210a7ad2f8b3 100644 (file)
@@ -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
index da348f7311128a761f69522513d7b3b5c9be07f9..cae94d7c103cdc53312cbbdfa32f3c3c3564c89a 100644 (file)
@@ -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 );
index 86cf24ade40b29cfbae5082d9026ad1b9beaa49c..168d42dc9bf6adfaec8f289e8b890ce4b76c111c 100644 (file)
@@ -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)
index 71f375374846958909f16ce043b02fbadcf163fe..f1c9c10d8169953db8233e5d3c5878df0b395996 100644 (file)
@@ -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);
index 77f153ff3b0dec8267b4fb98d380b10727c9c674..7ce26528f87ec21e1237131828d20c1a6e3935b2 100644 (file)
@@ -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)
index 30a0ff7d1ab9741f4dc41dea18d4d1582978560c..2c713b27d817af5e92cc5b06fd36577f1225d9c5 100644 (file)
@@ -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)
index 378e4dd021a72ab062f56b4868538e5b1c3b3b24..6b8fede5b05edd0039043da266f2c6c4c1ae0a26 100644 (file)
@@ -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++)
index 7d8c047b55e7cc42aaa2a80e7ca774c98f1dd652..4de7f9ad5913053721d6de86356f211ef9eeff75 100644 (file)
 #endif
 
 /* Define if you have the <lcms2.h> header file. */
-#ifndef MAGICKCORE_HAVE_LCMS2_H
-#define MAGICKCORE_HAVE_LCMS2_H 1
-#endif
+/* #undef HAVE_LCMS2_H */
 
 /* Define if you have the <lcms2/lcms2.h> header file. */
 /* #undef HAVE_LCMS2_LCMS2_H */
 
 /* Define if you have the <lcms.h> header file. */
-/* #undef HAVE_LCMS_H */
+#ifndef MAGICKCORE_HAVE_LCMS_H
+#define MAGICKCORE_HAVE_LCMS_H 1
+#endif
 
 /* Define if you have the <lcms/lcms.h> header file. */
 /* #undef HAVE_LCMS_LCMS_H */
 #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
 
 /* 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 */
 #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 */
 /* #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. */
index f453eee5a0b21e8bd89b298fed8e20219552f54e..a0ad8c9d3f2cb7f8fef4596a5de522b853316320 100644 (file)
@@ -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);
 }
index 445c40d6894c7896c3b259583cf829b739136a6e..b6e732a01a794764f79e2fce7132dba44417f2e4 100644 (file)
@@ -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 *),
index c628fa09ac6054a4bb9d6a7e4a6c57c1d7da8027..c4ebbb3997cf0f9454c8eca035d70cd623725370 100644 (file)
@@ -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)
index 78364c6d75f2a536436aa764d3b8ebb7d7cf9fc7..5283cfe5743f054391597d05dca7e321fa7e6a74 100644 (file)
@@ -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));
 }
 \f
 /*
index ef122d9e8ab3a216dd3b80da4973822a76b93a97..7d8e0fffcc1734ca3b02b2f8ee4c754d7d0f09e1 100644 (file)
@@ -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)
index 73e70d4b2f34ed38eacf9863aea6c96906bb46c6..4ca2b933abef717dedcc594ef981d8ffa565d436 100644 (file)
@@ -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)
index 2a8e17b98dc17d84ed393e62ce41cefaadda5a7c..23637f5bd0a1db36ba1a32f93b0ba98fe4fbaf6d 100644 (file)
@@ -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
             {
index 9dd72af7f26dbcd9377f895642522f7bd0316149..0f45f86c12ce89691fcb5acc8417f520d330b4a3 100644 (file)
@@ -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)
         {