From: cristy Date: Wed, 6 Jul 2011 01:03:32 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~7355 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab01585c1d1cf107833ad4e0427a1c65485433ac;p=imagemagick --- diff --git a/MagickCore/accelerate.c b/MagickCore/accelerate.c index 8bfacefd5..ceb052150 100644 --- a/MagickCore/accelerate.c +++ b/MagickCore/accelerate.c @@ -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" diff --git a/MagickCore/composite.c b/MagickCore/composite.c index 9c100cd1e..b1f4791b8 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -79,25 +79,30 @@ % % % % % % -% 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); diff --git a/MagickCore/composite.h b/MagickCore/composite.h index 19dea3714..68080942f 100644 --- a/MagickCore/composite.h +++ b/MagickCore/composite.h @@ -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) diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c index b3166c36d..d2e35a9e1 100644 --- a/MagickCore/enhance.c +++ b/MagickCore/enhance.c @@ -90,26 +90,13 @@ % 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)); } /* diff --git a/MagickCore/enhance.h b/MagickCore/enhance.h index fb5d39b85..c53bf73e9 100644 --- a/MagickCore/enhance.h +++ b/MagickCore/enhance.h @@ -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), diff --git a/MagickCore/methods.h b/MagickCore/methods.h index 907e45253..c02faebe5 100644 --- a/MagickCore/methods.h +++ b/MagickCore/methods.h @@ -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) diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c index 5239ef82f..aae2cd7ee 100644 --- a/MagickCore/morphology.c +++ b/MagickCore/morphology.c @@ -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 */ } diff --git a/MagickWand/composite.c b/MagickWand/composite.c index 905faa984..6f22b8077 100644 --- a/MagickWand/composite.c +++ b/MagickWand/composite.c @@ -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) diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c index 61c18e4ad..9e4072394 100644 --- a/MagickWand/magick-image.c +++ b/MagickWand/magick-image.c @@ -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); diff --git a/MagickWand/magick-image.h b/MagickWand/magick-image.h index 3401e517e..e4e5cfd11 100644 --- a/MagickWand/magick-image.h +++ b/MagickWand/magick-image.h @@ -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), diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index 61152ca24..b23612fd5 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -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,®ion_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,®ion_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); diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs index e3c2e27d7..430a00e87 100644 --- a/PerlMagick/Magick.xs +++ b/PerlMagick/Magick.xs @@ -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; diff --git a/coders/msl.c b/coders/msl.c index 3d77fdd68..46d8c6b02 100644 --- a/coders/msl.c +++ b/coders/msl.c @@ -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);