#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"
% %
% %
% %
-% 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.
}
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;
}
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,
}
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,
}
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,
}
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,
}
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;
}
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,
}
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,
}
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
}
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,
}
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,
}
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,
}
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,
}
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,
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"
}
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:
proceed;
#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp critical (MagickCore_CompositeImage)
+ #pragma omp critical (MagickCore_CompositeImageChannel)
#endif
proceed=SetImageProgress(image,CompositeImageTag,progress++,
image->rows);
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)
% 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;
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.
*/
&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)
{
% 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
/*
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),
#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)
#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)
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;
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:
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 */
}
*/
typedef struct _CompositeOptions
{
+ ChannelType
+ channel;
+
char
*compose_args,
*geometry;
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);
}
/*
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);
}
}
static void GetCompositeOptions(CompositeOptions *composite_options)
{
(void) ResetMagickMemory(composite_options,0,sizeof(*composite_options));
+ composite_options->channel=DefaultChannels;
composite_options->compose=OverCompositeOp;
}
if (*option == '+')
{
- SetPixelComponentMap(image,DefaultChannels);
+ composite_options.channel=DefaultChannels;
break;
}
i++;
if (channel < 0)
ThrowCompositeException(OptionError,"UnrecognizedChannelType",
argv[i]);
- SetPixelComponentMap(image,(ChannelType) channel);
+ composite_options.channel=(ChannelType) channel;
break;
}
if (LocaleCompare("colors",option+1) == 0)
% 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;
(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);
% 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;
(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);
% 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:
%
% 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;
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);
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),
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),
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)
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)
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;
*/
(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;
(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);
}
}
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).
*/
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
{
/*
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 */
{
if (attribute_flag[0] != 0)
channel=(ChannelType) argument_list[0].integer_reference;
- EqualizeImage(image,channel);
+ EqualizeImageChannel(image,channel);
break;
}
case 40: /* Gamma */
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;
}
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;
}
{
if (attribute_flag[0] != 0)
channel=(ChannelType) argument_list[0].integer_reference;
- NormalizeImage(image,channel);
+ NormalizeImageChannel(image,channel);
break;
}
case 46: /* NumberColors */
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 */
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;
}
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;
}
}
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;
}
}
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;
}
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 */
&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;
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
{
/*
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);