]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 6 Jul 2011 01:03:32 +0000 (01:03 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 6 Jul 2011 01:03:32 +0000 (01:03 +0000)
13 files changed:
MagickCore/accelerate.c
MagickCore/composite.c
MagickCore/composite.h
MagickCore/enhance.c
MagickCore/enhance.h
MagickCore/methods.h
MagickCore/morphology.c
MagickWand/composite.c
MagickWand/magick-image.c
MagickWand/magick-image.h
MagickWand/mogrify.c
PerlMagick/Magick.xs
coders/msl.c

index 8bfacefd5f0127930e1ecdc6804fa9ba1731e688..ceb05215050caf965c3b1f40dfb280703160cf18 100644 (file)
@@ -52,7 +52,6 @@
 #include "MagickCore/studio.h"
 #include "MagickCore/accelerate.h"
 #include "MagickCore/artifact.h"
-#include "MagickCore/cache.h"
 #include "MagickCore/cache-view.h"
 #include "MagickCore/color-private.h"
 #include "MagickCore/enhance.h"
index 9c100cd1e241d968eba7c3357748339f077c23b8..b1f4791b88d8df668284ffe618192ba4983fc785 100644 (file)
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   C o m p o s i t e I m a g e                                               %
+%   C o m p o s i t e I m a g e C h a n n e l                                 %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  CompositeImage() returns the second image composited onto the first
+%  CompositeImageChannel() returns the second image composited onto the first
 %  at the specified offset, using the specified composite method.
 %
-%  The format of the CompositeImage method is:
+%  The format of the CompositeImageChannel method is:
 %
 %      MagickBooleanType CompositeImage(Image *image,
 %        const CompositeOperator compose,Image *composite_image,
 %        const ssize_t x_offset,const ssize_t y_offset)
+%      MagickBooleanType CompositeImageChannel(Image *image,
+%        const ChannelType channel,const CompositeOperator compose,
+%        Image *composite_image,const ssize_t x_offset,const ssize_t y_offset)
 %
 %  A description of each parameter follows:
 %
 %    o image: the destination image, modified by he composition
 %
+%    o channel: the channel.
+%
 %    o compose: This operator affects how the composite is applied to
 %      the image.  The operators and how they are utilized are listed here
 %      http://www.w3.org/TR/SVG12/#compositing.
@@ -329,7 +334,7 @@ static inline MagickRealType Darken(const MagickRealType p,
 }
 
 static inline void CompositeDarken(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     gamma;
@@ -367,7 +372,8 @@ static inline void CompositeDarken(const Image *image,const PixelInfo *p,
 }
 
 static inline void CompositeDarkenIntensity(const Image *image,
-  const PixelInfo *p,const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *p,const PixelInfo *q,const ChannelType channel,
+  PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -414,7 +420,7 @@ static inline MagickRealType Difference(const MagickRealType p,
 }
 
 static inline void CompositeDifference(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -472,7 +478,7 @@ static MagickRealType Divide(const MagickRealType Sca,const MagickRealType Sa,
 }
 
 static inline void CompositeDivide(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -524,7 +530,7 @@ static MagickRealType Exclusion(const MagickRealType Sca,
 }
 
 static inline void CompositeExclusion(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     gamma,
@@ -678,7 +684,7 @@ static inline MagickRealType Lighten(const MagickRealType p,
 }
 
 static inline void CompositeLighten(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     gamma;
@@ -716,7 +722,8 @@ static inline void CompositeLighten(const Image *image,const PixelInfo *p,
 }
 
 static inline void CompositeLightenIntensity(const Image *image,
-  const PixelInfo *p,const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *p,const PixelInfo *q,const ChannelType channel,
+  PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -878,7 +885,8 @@ static inline MagickRealType Mathematics(const MagickRealType Sca,
 }
 
 static inline void CompositeMathematics(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,const GeometryInfo *args,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel, const GeometryInfo *args,
+  PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -924,7 +932,7 @@ static inline void CompositeMathematics(const Image *image,const PixelInfo *p,
 }
 
 static inline void CompositePlus(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   /*
     NOTE: "Plus" does not use 'over' alpha-blending but uses a special
@@ -975,7 +983,7 @@ static inline MagickRealType Minus(const MagickRealType Sca,
 }
 
 static inline void CompositeMinus(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -1025,7 +1033,7 @@ static inline MagickRealType ModulusAdd(const MagickRealType p,
 }
 
 static inline void CompositeModulusAdd(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -1075,7 +1083,8 @@ static inline MagickRealType ModulusSubtract(const MagickRealType p,
 }
 
 static inline void CompositeModulusSubtract(const Image *image,
-  const PixelInfo *p,const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *p,const PixelInfo *q, const ChannelType channel,
+  PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -1119,7 +1128,7 @@ static  inline MagickRealType Multiply(const MagickRealType Sca,
 }
 
 static inline void CompositeMultiply(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -1277,7 +1286,7 @@ static inline MagickRealType Screen(const MagickRealType Sca,
 }
 
 static inline void CompositeScreen(const Image *image,const PixelInfo *p,
-  const PixelInfo *q,PixelInfo *composite)
+  const PixelInfo *q,const ChannelType channel,PixelInfo *composite)
 {
   MagickRealType
     Da,
@@ -1545,6 +1554,18 @@ static void HSBComposite(const double hue,const double saturation,
 MagickExport MagickBooleanType CompositeImage(Image *image,
   const CompositeOperator compose,const Image *composite_image,
   const ssize_t x_offset,const ssize_t y_offset)
+{
+  MagickBooleanType
+    status;
+
+  status=CompositeImageChannel(image,DefaultChannels,compose,composite_image,
+    x_offset,y_offset);
+  return(status);
+}
+
+MagickExport MagickBooleanType CompositeImageChannel(Image *image,
+  const ChannelType channel,const CompositeOperator compose,
+  const Image *composite_image,const ssize_t x_offset,const ssize_t y_offset)
 {
 #define CompositeImageTag  "Composite/Image"
 
@@ -2374,83 +2395,86 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
         }
         case PlusCompositeOp:
         {
-          CompositePlus(image,&source,&destination,&composite);
+          CompositePlus(image,&source,&destination,channel,&composite);
           break;
         }
         case MinusDstCompositeOp:
         {
-          CompositeMinus(image,&source,&destination,&composite);
+          CompositeMinus(image,&source,&destination,channel,&composite);
           break;
         }
         case MinusSrcCompositeOp:
         {
-          CompositeMinus(image,&destination,&source,&composite);
+          CompositeMinus(image,&destination,&source,channel,&composite);
           break;
         }
         case ModulusAddCompositeOp:
         {
-          CompositeModulusAdd(image,&source,&destination,&composite);
+          CompositeModulusAdd(image,&source,&destination,channel,&composite);
           break;
         }
         case ModulusSubtractCompositeOp:
         {
-          CompositeModulusSubtract(image,&source,&destination,&composite);
+          CompositeModulusSubtract(image,&source,&destination,channel,
+            &composite);
           break;
         }
         case DifferenceCompositeOp:
         {
-          CompositeDifference(image,&source,&destination,&composite);
+          CompositeDifference(image,&source,&destination,channel,&composite);
           break;
         }
         case ExclusionCompositeOp:
         {
-          CompositeExclusion(image,&source,&destination,&composite);
+          CompositeExclusion(image,&source,&destination,channel,&composite);
           break;
         }
         case MultiplyCompositeOp:
         {
-          CompositeMultiply(image,&source,&destination,&composite);
+          CompositeMultiply(image,&source,&destination,channel,&composite);
           break;
         }
         case ScreenCompositeOp:
         {
-          CompositeScreen(image,&source,&destination,&composite);
+          CompositeScreen(image,&source,&destination,channel,&composite);
           break;
         }
         case DivideDstCompositeOp:
         {
-          CompositeDivide(image,&source,&destination,&composite);
+          CompositeDivide(image,&source,&destination,channel,&composite);
           break;
         }
         case DivideSrcCompositeOp:
         {
-          CompositeDivide(image,&destination,&source,&composite);
+          CompositeDivide(image,&destination,&source,channel,&composite);
           break;
         }
         case DarkenCompositeOp:
         {
-          CompositeDarken(image,&source,&destination,&composite);
+          CompositeDarken(image,&source,&destination,channel,&composite);
           break;
         }
         case LightenCompositeOp:
         {
-          CompositeLighten(image,&source,&destination,&composite);
+          CompositeLighten(image,&source,&destination,channel,&composite);
           break;
         }
         case DarkenIntensityCompositeOp:
         {
-          CompositeDarkenIntensity(image,&source,&destination,&composite);
+          CompositeDarkenIntensity(image,&source,&destination,channel,
+            &composite);
           break;
         }
         case LightenIntensityCompositeOp:
         {
-          CompositeLightenIntensity(image,&source,&destination,&composite);
+          CompositeLightenIntensity(image,&source,&destination,channel,
+            &composite);
           break;
         }
         case MathematicsCompositeOp:
         {
-          CompositeMathematics(image,&source,&destination,&geometry_info,
-            &composite);
+          CompositeMathematics(image,&source,&destination,channel,
+            &geometry_info,&composite);
           break;
         }
         case ColorDodgeCompositeOp:
@@ -2706,7 +2730,7 @@ MagickExport MagickBooleanType CompositeImage(Image *image,
           proceed;
 
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
-  #pragma omp critical (MagickCore_CompositeImage)
+  #pragma omp critical (MagickCore_CompositeImageChannel)
 #endif
         proceed=SetImageProgress(image,CompositeImageTag,progress++,
           image->rows);
index 19dea37146828d4ed4310dcdc70121881b686eca..68080942f8b78feafa2cc8bb5dcd6bf320321b78 100644 (file)
@@ -97,6 +97,8 @@ typedef enum
 extern MagickExport MagickBooleanType
   CompositeImage(Image *,const CompositeOperator,const Image *,const ssize_t,
     const ssize_t),
+  CompositeImageChannel(Image *,const ChannelType,const CompositeOperator,
+    const Image *,const ssize_t,const ssize_t),
   TextureImage(Image *,const Image *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
index b3166c36d2e04efd09d83ed8b8c543bd0c653628..d2e35a9e138c2cd2d689441394ade299f6d2d706 100644 (file)
 %  The format of the AutoGammaImage method is:
 %
 %      MagickBooleanType AutoGammaImage(Image *image)
-%      MagickBooleanType AutoGammaImageChannel(Image *image,
-%        const ChannelType channel)
 %
 %  A description of each parameter follows:
 %
 %    o image: The image to auto-level
 %
-%    o channel: The channels to auto-level.  If the special 'SyncChannels'
-%      flag is set all given channels is adjusted in the same way using the
-%      mean average of those channels.
-%
 */
-
 MagickExport MagickBooleanType AutoGammaImage(Image *image)
-{
-  return(AutoGammaImageChannel(image,DefaultChannels));
-}
-
-MagickExport MagickBooleanType AutoGammaImageChannel(Image *image,
-  const ChannelType channel)
 {
   MagickStatusType
     status;
@@ -121,17 +108,16 @@ MagickExport MagickBooleanType AutoGammaImageChannel(Image *image,
     sans;
 
   log_mean=log(0.5);
-
-  if ((channel & SyncChannels) != 0 )
+  if (image->sync != MagickFalse)
     {
       /*
         Apply gamma correction equally accross all given channels
       */
-      (void) GetImageChannelMean(image,channel,&mean,&sans,&image->exception);
+      (void) GetImageChannelMean(image,DefaultChannels,&mean,&sans,
+        &image->exception);
       gamma=log(mean*QuantumScale)/log_mean;
-      return(LevelImageChannel(image,channel,0.0,(double)QuantumRange,gamma));
+      return(LevelImageChannel(image,DefaultChannels,0.0,(double) QuantumRange,gamma));
     }
-
   /*
     Auto-gamma each channel separately.
   */
@@ -142,7 +128,7 @@ MagickExport MagickBooleanType AutoGammaImageChannel(Image *image,
         &image->exception);
       gamma=log(mean*QuantumScale)/log_mean;
       status=status && LevelImageChannel(image,RedChannel,0.0,(double)
-        QuantumRange, gamma);
+        QuantumRange,gamma);
     }
   if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
     {
@@ -198,31 +184,15 @@ MagickExport MagickBooleanType AutoGammaImageChannel(Image *image,
 %  The format of the LevelImage method is:
 %
 %      MagickBooleanType AutoLevelImage(Image *image)
-%      MagickBooleanType AutoLevelImageChannel(Image *image,
-%        const ChannelType channel)
 %
 %  A description of each parameter follows:
 %
 %    o image: The image to auto-level
 %
-%    o channel: The channels to auto-level.  If the special 'SyncChannels'
-%      flag is set the min/max/mean value of all given channels is used for
-%      all given channels, to all channels in the same way.
-%
 */
-
 MagickExport MagickBooleanType AutoLevelImage(Image *image)
 {
-  return(AutoLevelImageChannel(image,DefaultChannels));
-}
-
-MagickExport MagickBooleanType AutoLevelImageChannel(Image *image,
-  const ChannelType channel)
-{
-  /*
-    This is simply a convenience function around a Min/Max Histogram Stretch
-  */
-  return MinMaxStretchImage(image, channel, 0.0, 0.0);
+  return(MinMaxStretchImage(image,DefaultChannels,0.0,0.0));
 }
 \f
 /*
index fb5d39b8526c2a77da7258dfba9fe2a78f3d7bf5..c53bf73e9db072b5e4873c49c62fa550a7117251 100644 (file)
@@ -24,9 +24,7 @@ extern "C" {
 
 extern MagickExport MagickBooleanType
   AutoGammaImage(Image *),
-  AutoGammaImageChannel(Image *,const ChannelType),
   AutoLevelImage(Image *),
-  AutoLevelImageChannel(Image *,const ChannelType),
   BrightnessContrastImage(Image *,const double,const double),
   BrightnessContrastImageChannel(Image *,const ChannelType,const double,
     const double),
index 907e45253078c181f2751fc3cfd1ec470c321d4d..c02faebe59d37dd5e16726be70273605fe36e54a 100644 (file)
@@ -111,9 +111,9 @@ extern "C" {
 #define Ascii85Initialize  PrependMagickMethod(Ascii85Initialize)
 #define AsynchronousResourceComponentTerminus  PrependMagickMethod(AsynchronousResourceComponentTerminus)
 #define AttachBlob  PrependMagickMethod(AttachBlob)
-#define AutoGammaImageChannel  PrependMagickMethod(AutoGammaImageChannel)
 #define AutoGammaImage  PrependMagickMethod(AutoGammaImage)
-#define AutoLevelImageChannel  PrependMagickMethod(AutoLevelImageChannel)
+#define AutoGammaImage  PrependMagickMethod(AutoGammaImage)
+#define AutoLevelImage  PrependMagickMethod(AutoLevelImage)
 #define AutoLevelImage  PrependMagickMethod(AutoLevelImage)
 #define AverageImages  PrependMagickMethod(AverageImages)
 #define Base64Decode  PrependMagickMethod(Base64Decode)
@@ -189,7 +189,7 @@ extern "C" {
 #define CompareSplayTreeStringInfo  PrependMagickMethod(CompareSplayTreeStringInfo)
 #define CompareSplayTreeString  PrependMagickMethod(CompareSplayTreeString)
 #define CompareStringInfo  PrependMagickMethod(CompareStringInfo)
-#define CompositeImage  PrependMagickMethod(CompositeImage)
+#define CompositeImageChannel  PrependMagickMethod(CompositeImageChannel)
 #define CompositeImage  PrependMagickMethod(CompositeImage)
 #define CompositeLayers  PrependMagickMethod(CompositeLayers)
 #define CompressImageColormap  PrependMagickMethod(CompressImageColormap)
index 5239ef82f246b96b849e9f9f727e2834a52e876a..aae2cd7ee0c08364e8606cdd3a0af85a6a903233 100644 (file)
@@ -3852,7 +3852,8 @@ MagickExport Image *MorphologyApply(const Image *image, const ChannelType
       if ( method == VoronoiMorphology ) {
         /* Preserve the alpha channel of input image - but turned off */
         (void) SetImageAlphaChannel(rslt_image, DeactivateAlphaChannel);
-        (void) CompositeImage(rslt_image,CopyOpacityCompositeOp,image,0,0);
+        (void) CompositeImageChannel(rslt_image, DefaultChannels,
+          CopyOpacityCompositeOp, image, 0, 0);
         (void) SetImageAlphaChannel(rslt_image, DeactivateAlphaChannel);
       }
       goto exit_cleanup;
@@ -4079,14 +4080,17 @@ MagickExport Image *MorphologyApply(const Image *image, const ChannelType
           if ( verbose == MagickTrue )
             (void) FormatLocaleFile(stderr, "\n%s: Difference with original image",
                  CommandOptionToMnemonic(MagickMorphologyOptions, method) );
-          (void) CompositeImage(curr_image,DifferenceCompositeOp,image,0,0);
+          (void) CompositeImageChannel(curr_image,
+                  (ChannelType) (channel & ~SyncChannels),
+                  DifferenceCompositeOp, image, 0, 0);
           break;
         case EdgeMorphology:
           if ( verbose == MagickTrue )
             (void) FormatLocaleFile(stderr, "\n%s: Difference of Dilate and Erode",
                  CommandOptionToMnemonic(MagickMorphologyOptions, method) );
-          (void) CompositeImage(curr_image,DifferenceCompositeOp,save_image,
-            0,0);
+          (void) CompositeImageChannel(curr_image,
+                  (ChannelType) (channel & ~SyncChannels),
+                  DifferenceCompositeOp, save_image, 0, 0);
           save_image = DestroyImage(save_image); /* finished with save image */
           break;
         default:
@@ -4122,7 +4126,9 @@ MagickExport Image *MorphologyApply(const Image *image, const ChannelType
           if ( verbose == MagickTrue )
             (void) FormatLocaleFile(stderr, " (compose \"%s\")",
                  CommandOptionToMnemonic(MagickComposeOptions, rslt_compose) );
-          (void) CompositeImage(rslt_image,rslt_compose,curr_image,0,0);
+          (void) CompositeImageChannel(rslt_image,
+               (ChannelType) (channel & ~SyncChannels), rslt_compose,
+               curr_image, 0, 0);
           curr_image = DestroyImage(curr_image);
           curr_image = (Image *) image;  /* continue with original image */
         }
index 905faa984c0202986738f59e6c1c600a023ae55e..6f22b8077e6a811216149074b26ab623e839553f 100644 (file)
@@ -50,6 +50,9 @@
 */
 typedef struct _CompositeOptions
 {
+  ChannelType
+    channel;
+
   char
     *compose_args,
     *geometry;
@@ -186,7 +189,8 @@ static MagickBooleanType CompositeImageList(ImageInfo *image_info,Image **image,
               columns=composite_image->columns;
               for (y=0; y < (ssize_t) (*image)->rows; y+=(ssize_t) composite_image->rows)
                 for (x=0; x < (ssize_t) (*image)->columns; x+=(ssize_t) columns)
-                  status&=CompositeImage(*image,composite_options->compose,
+                  status&=CompositeImageChannel(*image,
+                    composite_options->channel,composite_options->compose,
                     composite_image,x,y);
               GetImageException(*image,exception);
             }
@@ -209,8 +213,9 @@ static MagickBooleanType CompositeImageList(ImageInfo *image_info,Image **image,
               /*
                 Digitally composite image.
               */
-              status&=CompositeImage(*image,composite_options->compose,
-                composite_image,geometry.x,geometry.y);
+              status&=CompositeImageChannel(*image,composite_options->channel,
+                composite_options->compose,composite_image,geometry.x,
+                geometry.y);
               GetImageException(*image,exception);
             }
     }
@@ -363,6 +368,7 @@ static MagickBooleanType CompositeUsage(void)
 static void GetCompositeOptions(CompositeOptions *composite_options)
 {
   (void) ResetMagickMemory(composite_options,0,sizeof(*composite_options));
+  composite_options->channel=DefaultChannels;
   composite_options->compose=OverCompositeOp;
 }
 
@@ -656,7 +662,7 @@ WandExport MagickBooleanType CompositeImageCommand(ImageInfo *image_info,
 
             if (*option == '+')
               {
-                SetPixelComponentMap(image,DefaultChannels);
+                composite_options.channel=DefaultChannels;
                 break;
               }
             i++;
@@ -666,7 +672,7 @@ WandExport MagickBooleanType CompositeImageCommand(ImageInfo *image_info,
             if (channel < 0)
               ThrowCompositeException(OptionError,"UnrecognizedChannelType",
                 argv[i]);
-            SetPixelComponentMap(image,(ChannelType) channel);
+            composite_options.channel=(ChannelType) channel;
             break;
           }
         if (LocaleCompare("colors",option+1) == 0)
index 61c18e4ad64ab5080013c3e6177232ca1232a2b5..9e4072394f659582ec83000afbf42871a2bb81b3 100644 (file)
@@ -761,27 +761,13 @@ WandExport MagickWand *MagickAppendImages(MagickWand *wand,
 %  The format of the MagickAutoGammaImage method is:
 %
 %      MagickBooleanType MagickAutoGammaImage(MagickWand *wand)
-%      MagickBooleanType MagickAutoGammaImageChannel(MagickWand *wand,
-%        const ChannelType channel)
 %
 %  A description of each parameter follows:
 %
 %    o wand: the magick wand.
 %
-%    o channel: the image channel(s).
-%
 */
 WandExport MagickBooleanType MagickAutoGammaImage(MagickWand *wand)
-{
-  MagickBooleanType
-    status;
-
-  status=MagickAutoGammaImageChannel(wand,DefaultChannels);
-  return(status);
-}
-
-WandExport MagickBooleanType MagickAutoGammaImageChannel(MagickWand *wand,
-  const ChannelType channel)
 {
   MagickBooleanType
     status;
@@ -792,7 +778,7 @@ WandExport MagickBooleanType MagickAutoGammaImageChannel(MagickWand *wand,
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  status=AutoGammaImageChannel(wand->images,channel);
+  status=AutoGammaImage(wand->images);
   if (status == MagickFalse)
     InheritException(wand->exception,&wand->images->exception);
   return(status);
@@ -815,27 +801,13 @@ WandExport MagickBooleanType MagickAutoGammaImageChannel(MagickWand *wand,
 %  The format of the MagickAutoLevelImage method is:
 %
 %      MagickBooleanType MagickAutoLevelImage(MagickWand *wand)
-%      MagickBooleanType MagickAutoLevelImageChannel(MagickWand *wand,
-%        const ChannelType channel)
 %
 %  A description of each parameter follows:
 %
 %    o wand: the magick wand.
 %
-%    o channel: the image channel(s).
-%
 */
 WandExport MagickBooleanType MagickAutoLevelImage(MagickWand *wand)
-{
-  MagickBooleanType
-    status;
-
-  status=MagickAutoLevelImageChannel(wand,DefaultChannels);
-  return(status);
-}
-
-WandExport MagickBooleanType MagickAutoLevelImageChannel(MagickWand *wand,
-  const ChannelType channel)
 {
   MagickBooleanType
     status;
@@ -846,7 +818,7 @@ WandExport MagickBooleanType MagickAutoLevelImageChannel(MagickWand *wand,
     (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
   if (wand->images == (Image *) NULL)
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  status=AutoLevelImageChannel(wand->images,channel);
+  status=AutoLevelImage(wand->images);
   if (status == MagickFalse)
     InheritException(wand->exception,&wand->images->exception);
   return(status);
@@ -1874,6 +1846,9 @@ WandExport MagickWand *MagickCompareImages(MagickWand *wand,
 %      MagickBooleanType MagickCompositeImage(MagickWand *wand,
 %        const MagickWand *composite_wand,const CompositeOperator compose,
 %        const ssize_t x,const ssize_t y)
+%      MagickBooleanType MagickCompositeImageChannel(MagickWand *wand,
+%        const ChannelType channel,const MagickWand *composite_wand,
+%        const CompositeOperator compose,const ssize_t x,const ssize_t y)
 %
 %  A description of each parameter follows:
 %
@@ -1895,9 +1870,22 @@ WandExport MagickWand *MagickCompareImages(MagickWand *wand,
 %    o y: the row offset of the composited image.
 %
 */
+
 WandExport MagickBooleanType MagickCompositeImage(MagickWand *wand,
-  const MagickWand *composite_wand,const CompositeOperator compose,
-  const ssize_t x,const ssize_t y)
+  const MagickWand *composite_wand,const CompositeOperator compose,const ssize_t x,
+  const ssize_t y)
+{
+  MagickBooleanType
+    status;
+
+  status=MagickCompositeImageChannel(wand,DefaultChannels,composite_wand,
+    compose,x,y);
+  return(status);
+}
+
+WandExport MagickBooleanType MagickCompositeImageChannel(MagickWand *wand,
+  const ChannelType channel,const MagickWand *composite_wand,
+  const CompositeOperator compose,const ssize_t x,const ssize_t y)
 {
   MagickBooleanType
     status;
@@ -1909,7 +1897,8 @@ WandExport MagickBooleanType MagickCompositeImage(MagickWand *wand,
   if ((wand->images == (Image *) NULL) ||
       (composite_wand->images == (Image *) NULL))
     ThrowWandException(WandError,"ContainsNoImages",wand->name);
-  status=CompositeImage(wand->images,compose,composite_wand->images,x,y);
+  status=CompositeImageChannel(wand->images,channel,compose,
+    composite_wand->images,x,y);
   if (status == MagickFalse)
     InheritException(wand->exception,&wand->images->exception);
   return(status);
index 3401e517e675127f7bac670cbc5bfb1b0d596980..e4e5cfd113b8d98672efb0355264eda36be99b1a 100644 (file)
@@ -88,9 +88,7 @@ extern WandExport MagickBooleanType
     const double,const double,const char *),
   MagickAnimateImages(MagickWand *,const char *),
   MagickAutoGammaImage(MagickWand *),
-  MagickAutoGammaImageChannel(MagickWand *,const ChannelType),
   MagickAutoLevelImage(MagickWand *),
-  MagickAutoLevelImageChannel(MagickWand *,const ChannelType),
   MagickBlackThresholdImage(MagickWand *,const PixelWand *),
   MagickBlueShiftImage(MagickWand *,const double),
   MagickBlurImage(MagickWand *,const double,const double),
@@ -115,6 +113,7 @@ extern WandExport MagickBooleanType
   MagickCommentImage(MagickWand *,const char *),
   MagickCompositeImage(MagickWand *,const MagickWand *,const CompositeOperator,
     const ssize_t,const ssize_t),
+  MagickCompositeImageChannel(MagickWand *,const ChannelType,const MagickWand *,    const CompositeOperator,const ssize_t,const ssize_t),
   MagickConstituteImage(MagickWand *,const size_t,const size_t,const char *,
     const StorageType,const void *),
   MagickContrastImage(MagickWand *,const MagickBooleanType),
index 61152ca24a416cfaa6ba4d86b036bff30fe0b73a..b23612fd54acdd919c602f7acfec5dcc0c096405 100644 (file)
@@ -797,7 +797,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
               Auto Adjust Gamma of image based on its mean
             */
             (void) SyncImageSettings(mogrify_info,*image);
-            (void) AutoGammaImageChannel(*image,channel);
+            (void) AutoGammaImage(*image);
             break;
           }
         if (LocaleCompare("auto-level",option+1) == 0)
@@ -806,7 +806,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
               Perfectly Normalize (max/min stretch) the image
             */
             (void) SyncImageSettings(mogrify_info,*image);
-            (void) AutoLevelImageChannel(*image,channel);
+            (void) AutoLevelImage(*image);
             break;
           }
         if (LocaleCompare("auto-orient",option+1) == 0)
@@ -2432,8 +2432,8 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
                   Composite region.
                 */
                 (void) CompositeImage(region_image,region_image->matte !=
-                  MagickFalse ? CopyCompositeOp : OverCompositeOp,*image,
-                  region_geometry.x,region_geometry.y);
+                     MagickFalse ? CopyCompositeOp : OverCompositeOp,*image,
+                     region_geometry.x,region_geometry.y);
                 InheritException(exception,&region_image->exception);
                 *image=DestroyImage(*image);
                 *image=region_image;
@@ -3176,8 +3176,8 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
       */
       (void) SyncImageSettings(mogrify_info,*image);
       (void) CompositeImage(region_image,region_image->matte !=
-        MagickFalse ? CopyCompositeOp : OverCompositeOp,*image,
-        region_geometry.x,region_geometry.y);
+           MagickFalse ? CopyCompositeOp : OverCompositeOp,*image,
+           region_geometry.x,region_geometry.y);
       InheritException(exception,&region_image->exception);
       *image=DestroyImage(*image);
       *image=region_image;
@@ -7460,8 +7460,8 @@ WandExport MagickBooleanType MogrifyImageList(ImageInfo *image_info,
                     (void) NegateImage(image->mask,MagickFalse);
                   }
               }
-            (void) CompositeImage(image,image->compose,composite_image,
-              geometry.x,geometry.y);
+            (void) CompositeImageChannel(image,channel,image->compose,
+              composite_image,geometry.x,geometry.y);
             if (mask_image != (Image *) NULL)
               mask_image=image->mask=DestroyImage(image->mask);
             composite_image=DestroyImage(composite_image);
index e3c2e27d754e6b3c0189d52e04815812f9a06bcc..430a00e87fe962924d409bb1c555e22af37e8540 100644 (file)
@@ -8329,10 +8329,7 @@ Mogrify(ref,...)
                 }
             }
           if (attribute_flag[11] != 0) /* channel */
-            {
-              channel=(ChannelType) argument_list[11].integer_reference;
-              SetPixelComponentMap(image,channel);
-            }
+            channel=(ChannelType) argument_list[11].integer_reference;
           /*
             Composite two images (normal composition).
           */
@@ -8343,7 +8340,8 @@ Mogrify(ref,...)
           flags=ParseGravityGeometry(image,composite_geometry,&geometry,
             exception);
           if (attribute_flag[8] == 0) /* no rotate */
-            CompositeImage(image,compose,composite_image,geometry.x,geometry.y);
+            CompositeImageChannel(image,channel,compose,composite_image,
+              geometry.x,geometry.y);
           else
             {
               /*
@@ -8353,7 +8351,8 @@ Mogrify(ref,...)
                 composite_image->columns)/2;
               geometry.y-=(ssize_t) (rotate_image->rows-
                 composite_image->rows)/2;
-              CompositeImage(image,compose,rotate_image,geometry.x,geometry.y);
+              CompositeImageChannel(image,channel,compose,rotate_image,
+                geometry.x,geometry.y);
               rotate_image=DestroyImage(rotate_image);
             }
           if (attribute_flag[10] != 0) /* mask */
@@ -8626,7 +8625,7 @@ Mogrify(ref,...)
         {
           if (attribute_flag[0] != 0)
             channel=(ChannelType) argument_list[0].integer_reference;
-          EqualizeImage(image,channel);
+          EqualizeImageChannel(image,channel);
           break;
         }
         case 40:  /* Gamma */
@@ -8650,7 +8649,7 @@ Mogrify(ref,...)
           if (strchr(argument_list[0].string_reference,',') != (char *) NULL)
             (void) GammaImage(image,argument_list[0].string_reference);
           else
-            (void) GammaImage(image,channel,InterpretLocaleValue(
+            (void) GammaImageChannel(image,channel,InterpretLocaleValue(
               argument_list[0].string_reference,(char **) NULL));
           break;
         }
@@ -8766,7 +8765,7 @@ Mogrify(ref,...)
             argument_list[0].integer_reference=0;
           if (attribute_flag[1] != 0)
             channel=(ChannelType) argument_list[1].integer_reference;
-          (void) NegateImage(image,channel,
+          (void) NegateImageChannel(image,channel,
             argument_list[0].integer_reference != 0 ? MagickTrue : MagickFalse);
           break;
         }
@@ -8774,7 +8773,7 @@ Mogrify(ref,...)
         {
           if (attribute_flag[0] != 0)
             channel=(ChannelType) argument_list[0].integer_reference;
-          NormalizeImage(image,channel);
+          NormalizeImageChannel(image,channel);
           break;
         }
         case 46:  /* NumberColors */
@@ -9315,7 +9314,7 @@ Mogrify(ref,...)
               argument_list[0].real_reference=argument_list[5].real_reference;
               attribute_flag[0]=attribute_flag[5];
             }
-          (void) LevelImage(image,channel,black_point,white_point,gamma);
+          (void) LevelImageChannel(image,channel,black_point,white_point,gamma);
           break;
         }
         case 74:  /* Clip */
@@ -9712,7 +9711,7 @@ Mogrify(ref,...)
           if (attribute_flag[4] != 0)
             sharpen=argument_list[4].integer_reference != 0 ? MagickTrue :
               MagickFalse;
-          (void) SigmoidalContrastImage(image,channel,sharpen,
+          (void) SigmoidalContrastImageChannel(image,channel,sharpen,
             geometry_info.rho,geometry_info.sigma);
           break;
         }
@@ -9808,7 +9807,7 @@ Mogrify(ref,...)
             white_point=argument_list[2].real_reference;
           if (attribute_flag[4] != 0)
             channel=(ChannelType) argument_list[4].integer_reference;
-          (void) ContrastStretchImage(image,channel,black_point,
+          (void) ContrastStretchImageChannel(image,channel,black_point,
             white_point);
           break;
         }
@@ -10149,7 +10148,7 @@ Mogrify(ref,...)
             }
           if (attribute_flag[1] != 0)
             channel=(ChannelType) argument_list[1].integer_reference;
-          (void) ClutImage(image,channel,
+          (void) ClutImageChannel(image,channel,
             argument_list[0].image_reference);
           break;
         }
@@ -10343,7 +10342,7 @@ Mogrify(ref,...)
             }
           if (attribute_flag[1] != 0)
             channel=(ChannelType) argument_list[1].integer_reference;
-          (void) HaldClutImage(image,channel,
+          (void) HaldClutImageChannel(image,channel,
             argument_list[0].image_reference);
           break;
         }
@@ -10380,15 +10379,21 @@ Mogrify(ref,...)
         case 127:  /* AutoGamma */
         {
           if (attribute_flag[0] != 0)
-            channel=(ChannelType) argument_list[0].integer_reference;
-          (void) AutoGammaImage(image,channel);
+            {
+              channel=(ChannelType) argument_list[0].integer_reference;
+              SetPixelComponentMap(image,channel);
+            }
+          (void) AutoGammaImage(image);
           break;
         }
         case 128:  /* AutoLevel */
         {
           if (attribute_flag[0] != 0)
-            channel=(ChannelType) argument_list[0].integer_reference;
-          (void) AutoLevelImage(image,channel);
+            {
+              channel=(ChannelType) argument_list[0].integer_reference;
+              SetPixelComponentMap(image,channel);
+            }
+          (void) AutoLevelImage(image);
           break;
         }
         case 129:  /* LevelColors */
@@ -10407,7 +10412,7 @@ Mogrify(ref,...)
                &white_point,exception);
           if (attribute_flag[3] != 0)
             channel=(ChannelType) argument_list[3].integer_reference;
-          (void) LevelColorsImage(image,channel,&black_point,
+          (void) LevelColorsImageChannel(image,channel,&black_point,
             &white_point,argument_list[0].integer_reference != 0 ? MagickTrue :
             MagickFalse);
           break;
index 3d77fdd686a9ce7173e6467528e9e3d9bb6b3931..46d8c6b029ab35382ff3f435f7bfa90e4655ec53 100644 (file)
@@ -2053,7 +2053,8 @@ static void MSLStartElement(void *context,const xmlChar *tag,
           flags=ParseGravityGeometry(image,composite_geometry,&geometry,
             &exception);
           if (rotate_image == (Image *) NULL)
-            CompositeImage(image,compose,composite_image,geometry.x,geometry.y);
+            CompositeImageChannel(image,channel,compose,composite_image,
+              geometry.x,geometry.y);
           else
             {
               /*
@@ -2062,7 +2063,8 @@ static void MSLStartElement(void *context,const xmlChar *tag,
               geometry.x-=(ssize_t) (rotate_image->columns-
                 composite_image->columns)/2;
               geometry.y-=(ssize_t) (rotate_image->rows-composite_image->rows)/2;
-              CompositeImage(image,compose,rotate_image,geometry.x,geometry.y);
+              CompositeImageChannel(image,channel,compose,rotate_image,
+                geometry.x,geometry.y);
               rotate_image=DestroyImage(rotate_image);
             }
           composite_image=DestroyImage(composite_image);