diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 46bb6a3..a48c649 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -5128,7 +5128,8 @@
r+=(image->columns+StatisticWidth)*GetPixelChannels(image);
}
GetPixelInfo(image,&pixel);
- SetPixelInfo(image,p+StatisticWidth*StatisticHeight/2,&pixel);
+ SetPixelInfo(image,p+(StatisticWidth*StatisticHeight/2)*
+ GetPixelChannels(image),&pixel);
switch (type)
{
case GradientStatistic:
@@ -5185,22 +5186,17 @@
}
}
if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
- SetPixelRed(statistic_image,
- ClampToQuantum(pixel.red),q);
+ SetPixelRed(statistic_image,ClampToQuantum(pixel.red),q);
if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
- SetPixelGreen(statistic_image,
- ClampToQuantum(pixel.green),q);
+ SetPixelGreen(statistic_image,ClampToQuantum(pixel.green),q);
if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
- SetPixelBlue(statistic_image,
- ClampToQuantum(pixel.blue),q);
+ SetPixelBlue(statistic_image,ClampToQuantum(pixel.blue),q);
if (((GetPixelBlackTraits(image) & ActivePixelTrait) != 0) &&
(image->colorspace == CMYKColorspace))
- SetPixelBlack(statistic_image,
- ClampToQuantum(pixel.black),q);
+ SetPixelBlack(statistic_image,ClampToQuantum(pixel.black),q);
if (((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) &&
(image->matte != MagickFalse))
- SetPixelAlpha(statistic_image,
- ClampToQuantum(pixel.alpha),q);
+ SetPixelAlpha(statistic_image,ClampToQuantum(pixel.alpha),q);
p+=GetPixelChannels(image);
q+=GetPixelChannels(statistic_image);
}
diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c
index 3cee6df..a5c32e7 100644
--- a/MagickCore/enhance.c
+++ b/MagickCore/enhance.c
@@ -107,9 +107,6 @@
mean,
sans;
- Image
- *level_image;
-
log_mean=log(0.5);
if (image->sync != MagickFalse)
{
@@ -125,32 +122,32 @@
Auto-gamma each channel separately.
*/
status=MagickTrue;
- level_image=CloneImage(image,0,0,MagickTrue,&image->exception);
- if (level_image == (Image *) NULL)
- return(MagickFalse);
if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
{
(void) GetImageChannelMean(image,RedChannel,&mean,&sans,
&image->exception);
gamma=log(mean*QuantumScale)/log_mean;
- SetPixelComponentMap(level_image,RedChannel);
- status=status && LevelImage(level_image,0.0,(double) QuantumRange,gamma);
+ PushPixelComponentMap(image,RedChannel);
+ status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
+ PopPixelComponentMap(image);
}
if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
{
(void) GetImageChannelMean(image,GreenChannel,&mean,&sans,
&image->exception);
gamma=log(mean*QuantumScale)/log_mean;
- SetPixelComponentMap(level_image,GreenChannel);
- status=status && LevelImage(level_image,0.0,(double) QuantumRange,gamma);
+ PushPixelComponentMap(image,GreenChannel);
+ status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
+ PopPixelComponentMap(image);
}
if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
{
(void) GetImageChannelMean(image,BlueChannel,&mean,&sans,
&image->exception);
gamma=log(mean*QuantumScale)/log_mean;
- SetPixelComponentMap(level_image,BlueChannel);
- status=status && LevelImage(level_image,0.0,(double) QuantumRange,gamma);
+ PushPixelComponentMap(image,BlueChannel);
+ status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
+ PopPixelComponentMap(image);
}
if (((GetPixelBlackTraits(image) & ActivePixelTrait) != 0) &&
(image->colorspace == CMYKColorspace))
@@ -158,8 +155,9 @@
(void) GetImageChannelMean(image,BlackChannel,&mean,&sans,
&image->exception);
gamma=log(mean*QuantumScale)/log_mean;
- SetPixelComponentMap(level_image,BlackChannel);
- status=status && LevelImage(level_image,0.0,(double) QuantumRange,gamma);
+ PushPixelComponentMap(image,BlackChannel);
+ status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
+ PopPixelComponentMap(image);
}
if (((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) &&
(image->matte == MagickTrue))
@@ -167,10 +165,10 @@
(void) GetImageChannelMean(image,OpacityChannel,&mean,&sans,
&image->exception);
gamma=log(mean*QuantumScale)/log_mean;
- SetPixelComponentMap(level_image,AlphaChannel);
- status=status && LevelImage(level_image,0.0,(double) QuantumRange,gamma);
+ PushPixelComponentMap(image,AlphaChannel);
+ status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
+ PopPixelComponentMap(image);
}
- level_image=DestroyImage(level_image);
return(status != 0 ? MagickTrue : MagickFalse);
}
@@ -199,7 +197,7 @@
*/
MagickExport MagickBooleanType AutoLevelImage(Image *image)
{
- return(MinMaxStretchImage(image,DefaultChannels,0.0,0.0));
+ return(MinMaxStretchImage(image,0.0,0.0));
}
/*
@@ -2609,7 +2607,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% LevelImageColor() maps the given color to "black" and "white" values,
+% LevelImageColors() maps the given color to "black" and "white" values,
% linearly spreading out the colors, and level values on a channel by channel
% bases, as per LevelImage(). The given colors allows you to specify
% different level ranges for each of the color channels separately.
@@ -2620,21 +2618,16 @@
% appropriatally. This effectivally maps a greyscale gradient into the given
% color gradient.
%
-% The format of the LevelColorsImageChannel method is:
+% The format of the LevelImageColors method is:
%
-% MagickBooleanType LevelColorsImage(Image *image,
-% const PixelInfo *black_color,
-% const PixelInfo *white_color,const MagickBooleanType invert)
-% MagickBooleanType LevelColorsImageChannel(Image *image,
-% const ChannelType channel,const PixelInfo *black_color,
-% const PixelInfo *white_color,const MagickBooleanType invert)
+% MagickBooleanType LevelImageColors(Image *image,
+% const PixelInfo *black_color,const PixelInfo *white_color,
+% const MagickBooleanType invert)
%
% A description of each parameter follows:
%
% o image: the image.
%
-% o channel: the channel.
-%
% o black_color: The color to map black to/from
%
% o white_point: The color to map white to/from
@@ -2642,23 +2635,10 @@
% o invert: if true map the colors (levelize), rather than from (level)
%
*/
-
-MagickExport MagickBooleanType LevelColorsImage(Image *image,
+MagickExport MagickBooleanType LevelImageColors(Image *image,
const PixelInfo *black_color,const PixelInfo *white_color,
const MagickBooleanType invert)
{
- MagickBooleanType
- status;
-
- status=LevelColorsImageChannel(image,DefaultChannels,black_color,white_color,
- invert);
- return(status);
-}
-
-MagickExport MagickBooleanType LevelColorsImageChannel(Image *image,
- const ChannelType channel,const PixelInfo *black_color,
- const PixelInfo *white_color,const MagickBooleanType invert)
-{
MagickStatusType
status;
@@ -2674,66 +2654,75 @@
{
if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
{
- SetPixelComponentMap(image,RedChannel);
+ PushPixelComponentMap(image,RedChannel);
status|=LevelImage(image,black_color->red,white_color->red,1.0);
+ PopPixelComponentMap(image);
}
if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
{
- SetPixelComponentMap(image,GreenChannel);
+ PushPixelComponentMap(image,GreenChannel);
status|=LevelImage(image,black_color->green,white_color->green,1.0);
+ PopPixelComponentMap(image);
}
if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
{
- SetPixelComponentMap(image,BlueChannel);
+ PushPixelComponentMap(image,BlueChannel);
status|=LevelImage(image,black_color->blue,white_color->blue,1.0);
+ PopPixelComponentMap(image);
}
if (((GetPixelBlackTraits(image) & ActivePixelTrait) != 0) &&
(image->colorspace == CMYKColorspace))
{
- SetPixelComponentMap(image,BlackChannel);
+ PushPixelComponentMap(image,BlackChannel);
status|=LevelImage(image,black_color->black,white_color->black,1.0);
+ PopPixelComponentMap(image);
}
if (((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) &&
(image->matte == MagickTrue))
{
- SetPixelComponentMap(image,AlphaChannel);
+ PushPixelComponentMap(image,AlphaChannel);
status|=LevelImage(image,black_color->alpha,white_color->alpha,1.0);
+ PopPixelComponentMap(image);
}
}
else
{
if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
{
- SetPixelComponentMap(image,RedChannel);
+ PushPixelComponentMap(image,RedChannel);
status|=LevelizeImage(image,black_color->red,white_color->red,1.0);
+ PopPixelComponentMap(image);
}
if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
{
- SetPixelComponentMap(image,GreenChannel);
+ PushPixelComponentMap(image,GreenChannel);
status|=LevelizeImage(image,black_color->green,white_color->green,
1.0);
+ PopPixelComponentMap(image);
}
if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
{
- SetPixelComponentMap(image,BlueChannel);
+ PushPixelComponentMap(image,BlueChannel);
status|=LevelizeImage(image,black_color->blue,white_color->blue,1.0);
+ PopPixelComponentMap(image);
}
if (((GetPixelBlackTraits(image) & ActivePixelTrait) != 0) &&
(image->colorspace == CMYKColorspace))
{
- SetPixelComponentMap(image,BlackChannel);
+ PushPixelComponentMap(image,BlackChannel);
status|=LevelizeImage(image,black_color->black,white_color->black,
1.0);
+ PopPixelComponentMap(image);
}
if (((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) &&
(image->matte == MagickTrue))
{
- SetPixelComponentMap(image,AlphaChannel);
+ PushPixelComponentMap(image,AlphaChannel);
status|=LevelizeImage(image,black_color->alpha,white_color->alpha,
1.0);
+ PopPixelComponentMap(image);
}
}
- SetPixelComponentMap(image,DefaultChannels);
return(status == 0 ? MagickFalse : MagickTrue);
}
diff --git a/MagickCore/enhance.h b/MagickCore/enhance.h
index 635902c..9965656 100644
--- a/MagickCore/enhance.h
+++ b/MagickCore/enhance.h
@@ -35,10 +35,8 @@
HaldClutImage(Image *,const Image *),
LevelImage(Image *,const double,const double,const double),
LevelizeImage(Image *,const double,const double,const double),
- LevelColorsImage(Image *,const PixelInfo *,const PixelInfo *,
+ LevelImageColors(Image *,const PixelInfo *,const PixelInfo *,
const MagickBooleanType),
- LevelColorsImageChannel(Image *,const ChannelType,const PixelInfo *,
- const PixelInfo *,const MagickBooleanType),
LinearStretchImage(Image *,const double,const double),
ModulateImage(Image *,const char *),
NegateImage(Image *,const MagickBooleanType),
diff --git a/MagickCore/feature.c b/MagickCore/feature.c
index f2b54f4..bc1f0d0 100644
--- a/MagickCore/feature.c
+++ b/MagickCore/feature.c
@@ -94,13 +94,13 @@
% %
% %
% %
-% G e t I m a g e C h a n n e l F e a t u r e s %
+% G e t I m a g e F e a t u r e s %
% %
% %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageChannelFeatures() returns features for each channel in the image in
+% GetImageFeatures() returns features for each channel in the image in
% each of four directions (horizontal, vertical, left and right diagonals)
% for the specified distance. The features include the angular second
% moment, contrast, correlation, sum of squares: variance, inverse difference
@@ -108,14 +108,14 @@
% measures of correlation 2, and maximum correlation coefficient. You can
% access the red channel contrast, for example, like this:
%
-% channel_features=GetImageChannelFeatures(image,1,exception);
+% channel_features=GetImageFeatures(image,1,exception);
% contrast=channel_features[RedChannel].contrast[0];
%
% Use MagickRelinquishMemory() to free the features buffer.
%
-% The format of the GetImageChannelFeatures method is:
+% The format of the GetImageFeatures method is:
%
-% ChannelFeatures *GetImageChannelFeatures(const Image *image,
+% ChannelFeatures *GetImageFeatures(const Image *image,
% const size_t distance,ExceptionInfo *exception)
%
% A description of each parameter follows:
@@ -135,7 +135,7 @@
return(x);
}
-MagickExport ChannelFeatures *GetImageChannelFeatures(const Image *image,
+MagickExport ChannelFeatures *GetImageFeatures(const Image *image,
const size_t distance,ExceptionInfo *exception)
{
typedef struct _ChannelStatistics
diff --git a/MagickCore/feature.h b/MagickCore/feature.h
index 7f8d1e5..88eb3d4 100644
--- a/MagickCore/feature.h
+++ b/MagickCore/feature.h
@@ -45,7 +45,7 @@
} ChannelFeatures;
extern MagickExport ChannelFeatures
- *GetImageChannelFeatures(const Image *,const size_t,ExceptionInfo *);
+ *GetImageFeatures(const Image *,const size_t,ExceptionInfo *);
#if defined(__cplusplus) || defined(c_plusplus)
}
diff --git a/MagickCore/fx.c b/MagickCore/fx.c
index e209b57..8a962e3 100644
--- a/MagickCore/fx.c
+++ b/MagickCore/fx.c
@@ -289,8 +289,6 @@
%
% Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
% ExceptionInfo *exception)
-% Image *AddNoiseImageChannel(const Image *image,const ChannelType channel,
-% const NoiseType noise_type,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
@@ -304,18 +302,7 @@
% o exception: return any errors or warnings in this structure.
%
*/
-MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type,
- ExceptionInfo *exception)
-{
- Image
- *noise_image;
-
- noise_image=AddNoiseImageChannel(image,DefaultChannels,noise_type,exception);
- return(noise_image);
-}
-
-MagickExport Image *AddNoiseImageChannel(const Image *image,
- const ChannelType channel,const NoiseType noise_type,ExceptionInfo *exception)
+MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type, ExceptionInfo *exception)
{
#define AddNoiseImageTag "AddNoise/Image"
@@ -2848,15 +2835,11 @@
%
% Image *FxImage(const Image *image,const char *expression,
% ExceptionInfo *exception)
-% Image *FxImageChannel(const Image *image,const ChannelType channel,
-% const char *expression,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o image: the image.
%
-% o channel: the channel.
-%
% o expression: A mathematical expression.
%
% o exception: return any errors or warnings in this structure.
@@ -2917,16 +2900,6 @@
MagickExport Image *FxImage(const Image *image,const char *expression,
ExceptionInfo *exception)
{
- Image
- *fx_image;
-
- fx_image=FxImageChannel(image,GrayChannel,expression,exception);
- return(fx_image);
-}
-
-MagickExport Image *FxImageChannel(const Image *image,const ChannelType channel,
- const char *expression,ExceptionInfo *exception)
-{
#define FxImageTag "Fx/Image"
CacheView
@@ -3056,7 +3029,7 @@
proceed;
#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp critical (MagickCore_FxImageChannel)
+ #pragma omp critical (MagickCore_FxImage)
#endif
proceed=SetImageProgress(image,FxImageTag,progress++,image->rows);
if (proceed == MagickFalse)
diff --git a/MagickCore/fx.h b/MagickCore/fx.h
index 67f6e55..9f97858 100644
--- a/MagickCore/fx.h
+++ b/MagickCore/fx.h
@@ -38,14 +38,11 @@
extern MagickExport Image
*AddNoiseImage(const Image *,const NoiseType,ExceptionInfo *),
- *AddNoiseImageChannel(const Image *,const ChannelType,const NoiseType,
- ExceptionInfo *),
*BlueShiftImage(const Image *,const double,ExceptionInfo *),
*CharcoalImage(const Image *,const double,const double,ExceptionInfo *),
*ColorizeImage(const Image *,const char *,const PixelPacket,ExceptionInfo *),
*ColorMatrixImage(const Image *,const KernelInfo *kernel,ExceptionInfo *),
*FxImage(const Image *,const char *,ExceptionInfo *),
- *FxImageChannel(const Image *,const ChannelType,const char *,ExceptionInfo *),
*ImplodeImage(const Image *,const double,ExceptionInfo *),
*MorphImages(const Image *,const size_t,ExceptionInfo *),
*PolaroidImage(const Image *,const DrawInfo *,const double,ExceptionInfo *),
diff --git a/MagickCore/histogram.c b/MagickCore/histogram.c
index f2877b8..9cbb84d 100644
--- a/MagickCore/histogram.c
+++ b/MagickCore/histogram.c
@@ -964,43 +964,37 @@
%
% The format of the MinMaxStretchImage method is:
%
-% MagickBooleanType MinMaxStretchImage(Image *image,
-% const ChannelType channel, const double black_adjust,
-% const double white_adjust)
+% MagickBooleanType MinMaxStretchImage(Image *image,const double black,
+% const double white)
%
% 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 the given channels are stretched by the same amount.
-%
-% o black_adjust, white_adjust: Move the Black/White Point inward
-% from the minimum and maximum points by this color value.
+% o black, white: move the black / white point inward from the minimum and
+% maximum points by this color value.
%
*/
MagickExport MagickBooleanType MinMaxStretchImage(Image *image,
- const ChannelType channel,const double black_value,const double white_value)
+ const double black,const double white)
{
double
min,
max;
- Image
- *stretch_image;
-
MagickStatusType
status;
status=MagickTrue;
- if ((channel & SyncChannels) != 0)
+ if (image->sync != MagickFalse)
{
/*
Auto-level all channels equally.
*/
- (void) GetImageChannelRange(image,channel,&min,&max,&image->exception);
- min+=black_value;
- max-=white_value;
+ (void) GetImageChannelRange(image,DefaultChannels,&min,&max,
+ &image->exception);
+ min+=black;
+ max-=white;
if (fabs(min-max) >= MagickEpsilon)
status&=LevelImage(image,min,max,1.0);
return(status != 0 ? MagickTrue : MagickFalse);
@@ -1008,42 +1002,42 @@
/*
Auto-level each channel separately.
*/
- stretch_image=CloneImage(image,0,0,MagickTrue,&image->exception);
- if (stretch_image == (Image *) NULL)
- return(MagickFalse);
if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
{
(void) GetImageChannelRange(image,RedChannel,&min,&max,&image->exception);
- min+=black_value;
- max-=white_value;
+ min+=black;
+ max-=white;
if (fabs(min-max) >= MagickEpsilon)
{
- SetPixelComponentMap(stretch_image,RedChannel);
- status&=LevelImage(stretch_image,min,max,1.0);
+ PushPixelComponentMap(image,RedChannel);
+ status&=LevelImage(image,min,max,1.0);
+ PopPixelComponentMap(image);
}
}
if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
{
(void) GetImageChannelRange(image,GreenChannel,&min,&max,
&image->exception);
- min+=black_value;
- max-=white_value;
+ min+=black;
+ max-=white;
if (fabs(min-max) >= MagickEpsilon)
{
- SetPixelComponentMap(stretch_image,GreenChannel);
- status&=LevelImage(stretch_image,min,max,1.0);
+ PushPixelComponentMap(image,GreenChannel);
+ status&=LevelImage(image,min,max,1.0);
+ PopPixelComponentMap(image);
}
}
if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
{
(void) GetImageChannelRange(image,BlueChannel,&min,&max,
&image->exception);
- min+=black_value;
- max-=white_value;
+ min+=black;
+ max-=white;
if (fabs(min-max) >= MagickEpsilon)
{
- SetPixelComponentMap(stretch_image,BlueChannel);
- status&=LevelImage(stretch_image,min,max,1.0);
+ PushPixelComponentMap(image,BlueChannel);
+ status&=LevelImage(image,min,max,1.0);
+ PopPixelComponentMap(image);
}
}
if (((GetPixelBlackTraits(image) & ActivePixelTrait) != 0) &&
@@ -1051,12 +1045,13 @@
{
(void) GetImageChannelRange(image,BlackChannel,&min,&max,
&image->exception);
- min+=black_value;
- max-=white_value;
+ min+=black;
+ max-=white;
if (fabs(min-max) >= MagickEpsilon)
{
- SetPixelComponentMap(stretch_image,BlackChannel);
- status&=LevelImage(stretch_image,min,max,1.0);
+ PushPixelComponentMap(image,BlackChannel);
+ status&=LevelImage(image,min,max,1.0);
+ PopPixelComponentMap(image);
}
}
if (((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) &&
@@ -1064,15 +1059,15 @@
{
(void) GetImageChannelRange(image,OpacityChannel,&min,&max,
&image->exception);
- min+=black_value;
- max-=white_value;
+ min+=black;
+ max-=white;
if (fabs(min-max) >= MagickEpsilon)
{
- SetPixelComponentMap(stretch_image,AlphaChannel);
- status&=LevelImage(stretch_image,min,max,1.0);
+ PushPixelComponentMap(image,AlphaChannel);
+ status&=LevelImage(image,min,max,1.0);
+ PopPixelComponentMap(image);
}
}
- stretch_image=DestroyImage(stretch_image);
return(status != 0 ? MagickTrue : MagickFalse);
}
diff --git a/MagickCore/histogram.h b/MagickCore/histogram.h
index a4151b5..a86f0fc 100644
--- a/MagickCore/histogram.h
+++ b/MagickCore/histogram.h
@@ -31,7 +31,7 @@
extern MagickExport MagickBooleanType
IsHistogramImage(const Image *,ExceptionInfo *),
IsPaletteImage(const Image *,ExceptionInfo *),
- MinMaxStretchImage(Image *,const ChannelType,const double,const double);
+ MinMaxStretchImage(Image *,const double,const double);
extern MagickExport size_t
GetNumberColors(const Image *,FILE *,ExceptionInfo *);
diff --git a/MagickCore/identify.c b/MagickCore/identify.c
index b5ebad6..cb5b452 100644
--- a/MagickCore/identify.c
+++ b/MagickCore/identify.c
@@ -430,7 +430,7 @@
if (artifact != (const char *) NULL)
{
distance=StringToUnsignedLong(artifact);
- channel_features=GetImageChannelFeatures(image,distance,
+ channel_features=GetImageFeatures(image,distance,
&image->exception);
}
depth=GetImageDepth(image,&image->exception);
diff --git a/MagickCore/image.c b/MagickCore/image.c
index b81304c..398d955 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -2672,7 +2672,7 @@
*/
GetPixelInfo(image,&background);
SetPixelInfoPacket(image,&(image->background_color),&background);
- (void) LevelColorsImage(image,&background,&background,MagickTrue);
+ (void) LevelImageColors(image,&background,&background,MagickTrue);
}
break;
}
diff --git a/MagickCore/image.h b/MagickCore/image.h
index 22e19c0..558d2c5 100644
--- a/MagickCore/image.h
+++ b/MagickCore/image.h
@@ -286,8 +286,11 @@
MagickBooleanType
sync;
+ size_t
+ map;
+
PixelComponentMap
- *component_map;
+ **component_map;
void
*cache;
diff --git a/MagickCore/magick-config.h b/MagickCore/magick-config.h
index 9002a55..53e983a 100644
--- a/MagickCore/magick-config.h
+++ b/MagickCore/magick-config.h
@@ -421,15 +421,15 @@
#endif
/* Define if you have the <lcms2.h> header file. */
-/* #undef HAVE_LCMS2_H */
+#ifndef MAGICKCORE_HAVE_LCMS2_H
+#define MAGICKCORE_HAVE_LCMS2_H 1
+#endif
/* Define if you have the <lcms2/lcms2.h> header file. */
/* #undef HAVE_LCMS2_LCMS2_H */
/* Define if you have the <lcms.h> header file. */
-#ifndef MAGICKCORE_HAVE_LCMS_H
-#define MAGICKCORE_HAVE_LCMS_H 1
-#endif
+/* #undef HAVE_LCMS_H */
/* Define if you have the <lcms/lcms.h> header file. */
/* #undef HAVE_LCMS_LCMS_H */
@@ -1152,9 +1152,7 @@
#endif
/* Define if you have JBIG library */
-#ifndef MAGICKCORE_JBIG_DELEGATE
-#define MAGICKCORE_JBIG_DELEGATE 1
-#endif
+/* #undef JBIG_DELEGATE */
/* Define if you have JPEG version 2 "Jasper" library */
#ifndef MAGICKCORE_JP2_DELEGATE
@@ -1183,9 +1181,7 @@
#endif
/* Define if you have LQR library */
-#ifndef MAGICKCORE_LQR_DELEGATE
-#define MAGICKCORE_LQR_DELEGATE 1
-#endif
+/* #undef LQR_DELEGATE */
/* Define if using libltdl to support dynamically loadable modules */
#ifndef MAGICKCORE_LTDL_DELEGATE
@@ -1197,7 +1193,7 @@
/* Define to the system default library search path. */
#ifndef MAGICKCORE_LT_DLSEARCH_PATH
-#define MAGICKCORE_LT_DLSEARCH_PATH "/lib64:/usr/lib64:/lib:/usr/lib:/usr/lib64/R/lib:/usr/lib64/atlas:/opt/modules/pkg/intel/f77/10.0.025/lib:/usr/local/lib:/usr/lib64/mysql:/usr/lib64/qt-3.3/lib:/usr/lib64/xulrunner-2"
+#define MAGICKCORE_LT_DLSEARCH_PATH "/lib64:/usr/lib64:/lib:/usr/lib:/usr/lib64/R/lib:/usr/lib64/alliance/lib:/usr/lib64/atlas:/opt/modules/pkg/intel/f77/10.0.025/lib:/usr/lib64/kicad:/usr/lib64/llvm:/usr/local/lib:/usr/lib64/mpich2/lib/:/usr/lib64/mysql:/usr/lib64/octave/3.4.0:/usr/lib64/openmotif:/usr/lib64/qt-3.3/lib:/usr/lib64/tcl8.5/tclx8.4:/usr/lib/wine/:/usr/lib64/wine/:/usr/lib64/xulrunner-2"
#endif
/* The archive extension */
@@ -1444,9 +1440,7 @@
/* Define if you have WEBP library */
-#ifndef MAGICKCORE_WEBP_DELEGATE
-#define MAGICKCORE_WEBP_DELEGATE 1
-#endif
+/* #undef WEBP_DELEGATE */
/* Define to use the Windows GDI32 library */
/* #undef WINGDI32_DELEGATE */
diff --git a/MagickCore/magick-type.h b/MagickCore/magick-type.h
index 4158da6..2866263 100644
--- a/MagickCore/magick-type.h
+++ b/MagickCore/magick-type.h
@@ -131,8 +131,6 @@
typedef MagickSizeType QuantumAny;
#endif
-#define MaxPixelComponents 4096
-
#if defined(macintosh)
#define ExceptionInfo MagickExceptionInfo
#endif
diff --git a/MagickCore/methods.h b/MagickCore/methods.h
index fb8101f..62d088c 100644
--- a/MagickCore/methods.h
+++ b/MagickCore/methods.h
@@ -87,7 +87,7 @@
#define AdaptiveSharpenImage PrependMagickMethod(AdaptiveSharpenImage)
#define AdaptiveThresholdImage PrependMagickMethod(AdaptiveThresholdImage)
#define AddChildToXMLTree PrependMagickMethod(AddChildToXMLTree)
-#define AddNoiseImageChannel PrependMagickMethod(AddNoiseImageChannel)
+#define AddNoiseImage PrependMagickMethod(AddNoiseImage)
#define AddNoiseImage PrependMagickMethod(AddNoiseImage)
#define AddPathToXMLTree PrependMagickMethod(AddPathToXMLTree)
#define AddValueToSplayTree PrependMagickMethod(AddValueToSplayTree)
@@ -350,7 +350,7 @@
#define FuzzyOpacityCompare PrependMagickMethod(FuzzyOpacityCompare)
#define FxEvaluateChannelExpression PrependMagickMethod(FxEvaluateChannelExpression)
#define FxEvaluateExpression PrependMagickMethod(FxEvaluateExpression)
-#define FxImageChannel PrependMagickMethod(FxImageChannel)
+#define FxImage PrependMagickMethod(FxImage)
#define FxImage PrependMagickMethod(FxImage)
#define FxPreprocessExpression PrependMagickMethod(FxPreprocessExpression)
#define GammaImage PrependMagickMethod(GammaImage)
@@ -682,8 +682,8 @@
#define KernelPrint PrependMagickMethod(KernelPrint)
#define KernelRotate PrependMagickMethod(KernelRotate)
#define LeastSquaresAddTerms PrependMagickMethod(LeastSquaresAddTerms)
-#define LevelColorsImageChannel PrependMagickMethod(LevelColorsImageChannel)
-#define LevelColorsImage PrependMagickMethod(LevelColorsImage)
+#define LevelImageColors PrependMagickMethod(LevelImageColors)
+#define LevelImageColors PrependMagickMethod(LevelImageColors)
#define LevelImage PrependMagickMethod(LevelImage)
#define LevelImageColors PrependMagickMethod(LevelImageColors)
#define LevelImage PrependMagickMethod(LevelImage)
diff --git a/MagickCore/pixel-accessor.h b/MagickCore/pixel-accessor.h
index b685ac7..eb81c20 100644
--- a/MagickCore/pixel-accessor.h
+++ b/MagickCore/pixel-accessor.h
@@ -29,42 +29,42 @@
static inline Quantum GetPixelAlpha(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[AlphaPixelComponent].component]);
+ return(pixel[image->component_map[image->map][AlphaPixelComponent].component]);
}
static inline PixelTrait GetPixelAlphaTraits(const Image *image)
{
- return(image->component_map[AlphaPixelComponent].traits);
+ return(image->component_map[image->map][AlphaPixelComponent].traits);
}
static inline Quantum GetPixelBlack(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[BlackPixelComponent].component]);
+ return(pixel[image->component_map[image->map][BlackPixelComponent].component]);
}
static inline PixelTrait GetPixelBlackTraits(const Image *image)
{
- return(image->component_map[BlackPixelComponent].traits);
+ return(image->component_map[image->map][BlackPixelComponent].traits);
}
static inline Quantum GetPixelBlue(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[BluePixelComponent].component]);
+ return(pixel[image->component_map[image->map][BluePixelComponent].component]);
}
static inline PixelTrait GetPixelBlueTraits(const Image *image)
{
- return(image->component_map[BluePixelComponent].traits);
+ return(image->component_map[image->map][BluePixelComponent].traits);
}
static inline Quantum GetPixelCb(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[CbPixelComponent].component]);
+ return(pixel[image->component_map[image->map][CbPixelComponent].component]);
}
static inline PixelTrait GetPixelCbTraits(const Image *image)
{
- return(image->component_map[CbPixelComponent].traits);
+ return(image->component_map[image->map][CbPixelComponent].traits);
}
static inline size_t GetPixelChannels(const Image *image)
@@ -75,57 +75,57 @@
static inline Quantum GetPixelComponent(const Image *image,
const PixelComponent component)
{
- return(image->component_map[component].component);
+ return(image->component_map[image->map][component].component);
}
static inline Quantum GetPixelCr(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[CrPixelComponent].component]);
+ return(pixel[image->component_map[image->map][CrPixelComponent].component]);
}
static inline PixelTrait GetPixelCrTraits(const Image *image)
{
- return(image->component_map[CrPixelComponent].traits);
+ return(image->component_map[image->map][CrPixelComponent].traits);
}
static inline Quantum GetPixelCyan(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[CyanPixelComponent].component]);
+ return(pixel[image->component_map[image->map][CyanPixelComponent].component]);
}
static inline PixelTrait GetPixelCyanTraits(const Image *image)
{
- return(image->component_map[CyanPixelComponent].traits);
+ return(image->component_map[image->map][CyanPixelComponent].traits);
}
static inline Quantum GetPixelGray(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[GrayPixelComponent].component]);
+ return(pixel[image->component_map[image->map][GrayPixelComponent].component]);
}
static inline PixelTrait GetPixelGrayTraits(const Image *image)
{
- return(image->component_map[GrayPixelComponent].traits);
+ return(image->component_map[image->map][GrayPixelComponent].traits);
}
static inline Quantum GetPixelGreen(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[GreenPixelComponent].component]);
+ return(pixel[image->component_map[image->map][GreenPixelComponent].component]);
}
static inline PixelTrait GetPixelGreenTraits(const Image *image)
{
- return(image->component_map[GreenPixelComponent].traits);
+ return(image->component_map[image->map][GreenPixelComponent].traits);
}
static inline Quantum GetPixelIndex(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[IndexPixelComponent].component]);
+ return(pixel[image->component_map[image->map][IndexPixelComponent].component]);
}
static inline PixelTrait GetPixelIndexTraits(const Image *image)
{
- return(image->component_map[IndexPixelComponent].traits);
+ return(image->component_map[image->map][IndexPixelComponent].traits);
}
static inline Quantum GetPixelInfoIntensity(const PixelInfo *pixel_info)
@@ -155,12 +155,12 @@
static inline Quantum GetPixelMagenta(const Image *image,
const Quantum *pixel)
{
- return(pixel[image->component_map[MagentaPixelComponent].component]);
+ return(pixel[image->component_map[image->map][MagentaPixelComponent].component]);
}
static inline PixelTrait GetPixelMagentaTraits(const Image *image)
{
- return(image->component_map[MagentaPixelComponent].traits);
+ return(image->component_map[image->map][MagentaPixelComponent].traits);
}
static inline size_t GetPixelMetacontentExtent(const Image *image)
@@ -170,12 +170,12 @@
static inline Quantum GetPixelRed(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[RedPixelComponent].component]);
+ return(pixel[image->component_map[image->map][RedPixelComponent].component]);
}
static inline PixelTrait GetPixelRedTraits(const Image *image)
{
- return(image->component_map[RedPixelComponent].traits);
+ return(image->component_map[image->map][RedPixelComponent].traits);
}
static inline void GetPixelPacket(const Image *image,const Quantum *pixel,
@@ -211,28 +211,28 @@
static inline PixelTrait GetPixelComponentTraits(const Image *image,
const PixelComponent component)
{
- return(image->component_map[component].traits);
+ return(image->component_map[image->map][component].traits);
}
static inline Quantum GetPixelY(const Image *image,const Quantum *pixel)
{
- return(pixel[image->component_map[YPixelComponent].component]);
+ return(pixel[image->component_map[image->map][YPixelComponent].component]);
}
static inline PixelTrait GetPixelYTraits(const Image *image)
{
- return(image->component_map[YPixelComponent].traits);
+ return(image->component_map[image->map][YPixelComponent].traits);
}
static inline Quantum GetPixelYellow(const Image *image,
const Quantum *pixel)
{
- return(pixel[image->component_map[YellowPixelComponent].component]);
+ return(pixel[image->component_map[image->map][YellowPixelComponent].component]);
}
static inline PixelTrait GetPixelYellowTraits(const Image *image)
{
- return(image->component_map[YellowPixelComponent].traits);
+ return(image->component_map[image->map][YellowPixelComponent].traits);
}
static inline MagickBooleanType IsPixelEquivalent(const Image *image,
@@ -412,45 +412,45 @@
static inline void SetPixelAlpha(const Image *image,const Quantum alpha,
Quantum *pixel)
{
- pixel[image->component_map[AlphaPixelComponent].component]=alpha;
+ pixel[image->component_map[image->map][AlphaPixelComponent].component]=alpha;
}
static inline void SetPixelAlphaTraits(Image *image,const PixelTrait traits)
{
- image->component_map[AlphaPixelComponent].traits=traits;
+ image->component_map[image->map][AlphaPixelComponent].traits=traits;
}
static inline void SetPixelBlack(const Image *image,const Quantum black,
Quantum *pixel)
{
- pixel[image->component_map[BlackPixelComponent].component]=black;
+ pixel[image->component_map[image->map][BlackPixelComponent].component]=black;
}
static inline void SetPixelBlackTraits(Image *image,const PixelTrait traits)
{
- image->component_map[BlackPixelComponent].traits=traits;
+ image->component_map[image->map][BlackPixelComponent].traits=traits;
}
static inline void SetPixelBlue(const Image *image,const Quantum blue,
Quantum *pixel)
{
- pixel[image->component_map[BluePixelComponent].component]=blue;
+ pixel[image->component_map[image->map][BluePixelComponent].component]=blue;
}
static inline void SetPixelBlueTraits(Image *image,const PixelTrait traits)
{
- image->component_map[BluePixelComponent].traits=traits;
+ image->component_map[image->map][BluePixelComponent].traits=traits;
}
static inline void SetPixelCb(const Image *image,const Quantum cb,
Quantum *pixel)
{
- pixel[image->component_map[CbPixelComponent].component]=cb;
+ pixel[image->component_map[image->map][CbPixelComponent].component]=cb;
}
static inline void SetPixelCbTraits(Image *image,const PixelTrait traits)
{
- image->component_map[CbPixelComponent].traits=traits;
+ image->component_map[image->map][CbPixelComponent].traits=traits;
}
static inline void SetPixelChannels(Image *image,const size_t channels)
@@ -461,63 +461,63 @@
static inline void SetPixelComponent(const Image *image,
const PixelComponent component,const PixelComponent components)
{
- image->component_map[component].component=components;
+ image->component_map[image->map][component].component=components;
}
static inline void SetPixelComponentTraits(Image *image,
const PixelComponent component,const PixelTrait traits)
{
- image->component_map[component].traits=traits;
+ image->component_map[image->map][component].traits=traits;
}
static inline void SetPixelCr(const Image *image,const Quantum cr,
Quantum *pixel)
{
- pixel[image->component_map[CrPixelComponent].component]=cr;
+ pixel[image->component_map[image->map][CrPixelComponent].component]=cr;
}
static inline void SetPixelCrTraits(Image *image,const PixelTrait traits)
{
- image->component_map[CrPixelComponent].traits=traits;
+ image->component_map[image->map][CrPixelComponent].traits=traits;
}
static inline void SetPixelCyan(const Image *image,const Quantum cyan,
Quantum *pixel)
{
- pixel[image->component_map[CyanPixelComponent].component]=cyan;
+ pixel[image->component_map[image->map][CyanPixelComponent].component]=cyan;
}
static inline void SetPixelGray(const Image *image,const Quantum gray,
Quantum *pixel)
{
- pixel[image->component_map[GrayPixelComponent].component]=gray;
+ pixel[image->component_map[image->map][GrayPixelComponent].component]=gray;
}
static inline void SetPixelGrayTraits(Image *image,const PixelTrait traits)
{
- image->component_map[GrayPixelComponent].traits=traits;
+ image->component_map[image->map][GrayPixelComponent].traits=traits;
}
static inline void SetPixelGreen(const Image *image,const Quantum green,
Quantum *pixel)
{
- pixel[image->component_map[GreenPixelComponent].component]=green;
+ pixel[image->component_map[image->map][GreenPixelComponent].component]=green;
}
static inline void SetPixelGreenTraits(Image *image,const PixelTrait traits)
{
- image->component_map[GreenPixelComponent].traits=traits;
+ image->component_map[image->map][GreenPixelComponent].traits=traits;
}
static inline void SetPixelIndex(const Image *image,const Quantum index,
Quantum *pixel)
{
- pixel[image->component_map[IndexPixelComponent].component]=index;
+ pixel[image->component_map[image->map][IndexPixelComponent].component]=index;
}
static inline void SetPixelIndexTraits(Image *image,const PixelTrait traits)
{
- image->component_map[IndexPixelComponent].traits=traits;
+ image->component_map[image->map][IndexPixelComponent].traits=traits;
}
static inline void SetPixelInfo(const Image *image,const Quantum *pixel,
@@ -562,12 +562,12 @@
static inline void SetPixelMagenta(const Image *image,const Quantum magenta,
Quantum *pixel)
{
- pixel[image->component_map[MagentaPixelComponent].component]=magenta;
+ pixel[image->component_map[image->map][MagentaPixelComponent].component]=magenta;
}
static inline void SetPixelMagentaTraits(Image *image,const PixelTrait traits)
{
- image->component_map[MagentaPixelComponent].traits=traits;
+ image->component_map[image->map][MagentaPixelComponent].traits=traits;
}
static inline void SetPixelMetacontentExtent(Image *image,const size_t extent)
@@ -578,12 +578,12 @@
static inline void SetPixelRed(const Image *image,const Quantum red,
Quantum *pixel)
{
- pixel[image->component_map[RedPixelComponent].component]=red;
+ pixel[image->component_map[image->map][RedPixelComponent].component]=red;
}
static inline void SetPixelRedTraits(Image *image,const PixelTrait traits)
{
- image->component_map[RedPixelComponent].traits=traits;
+ image->component_map[image->map][RedPixelComponent].traits=traits;
}
static inline void SetPixelPacket(const Image *image,const PixelPacket *packet,
@@ -609,23 +609,23 @@
static inline void SetPixelYellow(const Image *image,const Quantum yellow,
Quantum *pixel)
{
- pixel[image->component_map[YellowPixelComponent].component]=yellow;
+ pixel[image->component_map[image->map][YellowPixelComponent].component]=yellow;
}
static inline void SetPixelYellowTraits(Image *image,const PixelTrait traits)
{
- image->component_map[YellowPixelComponent].traits=traits;
+ image->component_map[image->map][YellowPixelComponent].traits=traits;
}
static inline void SetPixelY(const Image *image,const Quantum y,
Quantum *pixel)
{
- pixel[image->component_map[YPixelComponent].component]=y;
+ pixel[image->component_map[image->map][YPixelComponent].component]=y;
}
static inline void SetPixelYTraits(Image *image,const PixelTrait traits)
{
- image->component_map[YPixelComponent].traits=traits;
+ image->component_map[image->map][YPixelComponent].traits=traits;
}
static inline Quantum GetPixelIntensity(const Image *image,
diff --git a/MagickCore/pixel.c b/MagickCore/pixel.c
index 325615c..f0e5a06 100644
--- a/MagickCore/pixel.c
+++ b/MagickCore/pixel.c
@@ -83,25 +83,35 @@
%
% The format of the AcquirePixelComponentMap() method is:
%
-% PixelComponentMap *AcquirePixelComponentMap(void)
+% PixelComponentMap **AcquirePixelComponentMap(void)
%
*/
-MagickExport PixelComponentMap *AcquirePixelComponentMap(void)
+MagickExport PixelComponentMap **AcquirePixelComponentMap(void)
{
PixelComponentMap
- *component_map;
+ **component_map;
register ssize_t
i;
- component_map=(PixelComponentMap *) AcquireAlignedMemory(MaxPixelComponents,
- sizeof(*component_map));
- if (component_map == (PixelComponentMap *) NULL)
+ component_map=(PixelComponentMap **) AcquireAlignedMemory(
+ MaxPixelComponentMaps,sizeof(**component_map));
+ if (component_map == (PixelComponentMap **) NULL)
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
- (void) ResetMagickMemory(component_map,0,MaxPixelComponents*
- sizeof(*component_map));
- for (i=0; i < MaxPixelComponents; i++)
- component_map[i].component=(PixelComponent) i;
+ for (i=0; i < MaxPixelComponentMaps; i++)
+ {
+ register ssize_t
+ j;
+
+ component_map[i]=(PixelComponentMap *) AcquireQuantumMemory(
+ MaxPixelComponents,sizeof(*component_map[i]));
+ if (component_map[i] == (PixelComponentMap *) NULL)
+ ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+ (void) ResetMagickMemory(component_map[i],0,MaxPixelComponents*
+ sizeof(*component_map[i]));
+ for (j=0; j < MaxPixelComponents; j++)
+ component_map[i][j].component=(PixelComponent) j;
+ }
return(component_map);
}
@@ -120,26 +130,30 @@
%
% The format of the ClonePixelComponentMap() method is:
%
-% PixelComponentMap *ClonePixelComponentMap(
-% const PixelComponentMap *component_map)
+% PixelComponentMap **ClonePixelComponentMap(
+% PixelComponentMap **component_map)
%
% A description of each parameter follows:
%
% o component_map: the pixel component map.
%
*/
-MagickExport PixelComponentMap *ClonePixelComponentMap(
- const PixelComponentMap *component_map)
+MagickExport PixelComponentMap **ClonePixelComponentMap(
+ PixelComponentMap **component_map)
{
PixelComponentMap
- *clone_map;
+ **clone_map;
- assert(component_map != (const PixelComponentMap *) NULL);
+ register ssize_t
+ i;
+
+ assert(component_map != (PixelComponentMap **) NULL);
clone_map=AcquirePixelComponentMap();
- if (clone_map == (PixelComponentMap *) NULL)
- return((PixelComponentMap *) NULL);
- (void) CopyMagickMemory(clone_map,component_map,MaxPixelComponents*
- sizeof(*component_map));
+ if (clone_map == (PixelComponentMap **) NULL)
+ return((PixelComponentMap **) NULL);
+ for (i=0; i < MaxPixelComponentMaps; i++)
+ (void) CopyMagickMemory(clone_map[i],component_map[i],MaxPixelComponents*
+ sizeof(*component_map[i]));
return(clone_map);
}
@@ -194,19 +208,25 @@
%
% The format of the DestroyPixelComponentMap() method is:
%
-% PixelComponentMap *DestroyPixelComponentMap(
-% PixelComponentMap *component_map)
+% PixelComponentMap **DestroyPixelComponentMap(
+% PixelComponentMap **component_map)
%
% A description of each parameter follows:
%
% o component_map: the pixel component map.
%
*/
-MagickExport PixelComponentMap *DestroyPixelComponentMap(
- PixelComponentMap *component_map)
+MagickExport PixelComponentMap **DestroyPixelComponentMap(
+ PixelComponentMap **component_map)
{
- assert(component_map != (PixelComponentMap *) NULL);
- return((PixelComponentMap *) RelinquishMagickMemory(component_map));
+ register ssize_t
+ i;
+
+ assert(component_map != (PixelComponentMap **) NULL);
+ for (i=0; i < MaxPixelComponentMaps; i++)
+ component_map[i]=(PixelComponentMap *) RelinquishMagickMemory(
+ component_map[i]);
+ return((PixelComponentMap **) RelinquishMagickMemory(component_map));
}
/*
@@ -4428,6 +4448,69 @@
% %
% %
% %
+% P o p P i x e l C o m p o n e n t M a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PopPixelComponentMap() pops the pixel component map.
+%
+% The format of the PopPixelComponentMap method is:
+%
+% void PopPixelComponentMap(Image *image)
+%
+% A description of each parameter follows:
+%
+% o image: the image.
+%
+*/
+MagickExport void PopPixelComponentMap(Image *image)
+{
+ if (image->map == 0)
+ ThrowFatalException(ResourceLimitFatalError,"PixelComponentMapStack");
+ image->map--;
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% P u s h P i x e l C o m p o n e n t M a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PushPixelComponentMap() pushes the pixel component map from the specified
+% channel mask.
+%
+% The format of the PushPixelComponentMap method is:
+%
+% void PushPixelComponentMap(Image *image,const ChannelType channel_mask)
+%
+% A description of each parameter follows:
+%
+% o image: the image.
+%
+% o channel_mask: the channel mask.
+%
+*/
+MagickExport void PushPixelComponentMap(Image *image,
+ const ChannelType channel_mask)
+{
+ if (image->map >= MaxPixelComponentMaps)
+ ThrowFatalException(ResourceLimitFatalError,"PixelComponentMapStack");
+ image->map++;
+ SetPixelComponentMap(image,channel_mask);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
% S e t P i x e l C o m p o n e n t M a p %
% %
% %
@@ -4439,32 +4522,33 @@
%
% The format of the SetPixelComponentMap method is:
%
-% void SetPixelComponentMap(Image *image,const ChannelType channel)
+% void SetPixelComponentMap(Image *image,const ChannelType channel_mask)
%
% A description of each parameter follows:
%
% o image: the image.
%
-% o channel: the channel mask.
+% o channel_mask: the channel mask.
%
*/
-MagickExport void SetPixelComponentMap(Image *image,const ChannelType channel)
+MagickExport void SetPixelComponentMap(Image *image,
+ const ChannelType channel_mask)
{
register ssize_t
i;
for (i=0; i < MaxPixelComponents; i++)
- image->component_map[i].traits=UndefinedPixelTrait;
- image->sync=(channel & SyncChannels) != 0 ? MagickTrue : MagickFalse;
- if ((channel & RedChannel) != 0)
+ SetPixelComponentTraits(image,(PixelComponent) i,UndefinedPixelTrait);
+ image->sync=(channel_mask & SyncChannels) != 0 ? MagickTrue : MagickFalse;
+ if ((channel_mask & RedChannel) != 0)
SetPixelRedTraits(image,ActivePixelTrait);
- if ((channel & GreenChannel) != 0)
+ if ((channel_mask & GreenChannel) != 0)
SetPixelGreenTraits(image,ActivePixelTrait);
- if ((channel & BlueChannel) != 0)
+ if ((channel_mask & BlueChannel) != 0)
SetPixelBlueTraits(image,ActivePixelTrait);
- if ((channel & BlackChannel) != 0)
+ if ((channel_mask & BlackChannel) != 0)
SetPixelBlackTraits(image,ActivePixelTrait);
- if ((channel & AlphaChannel) != 0)
+ if ((channel_mask & AlphaChannel) != 0)
SetPixelAlphaTraits(image,ActivePixelTrait);
}
diff --git a/MagickCore/pixel.h b/MagickCore/pixel.h
index b614ea9..bb10bf1 100644
--- a/MagickCore/pixel.h
+++ b/MagickCore/pixel.h
@@ -25,6 +25,9 @@
#include <MagickCore/colorspace.h>
#include <MagickCore/constitute.h>
+#define MaxPixelComponents 16
+#define MaxPixelComponentMaps 16
+
typedef enum
{
UndefinedInterpolatePixel,
@@ -150,9 +153,9 @@
const PixelPacket *);
extern MagickExport PixelComponentMap
- *AcquirePixelComponentMap(void),
- *ClonePixelComponentMap(const PixelComponentMap *),
- *DestroyPixelComponentMap(PixelComponentMap *);
+ **AcquirePixelComponentMap(void),
+ **ClonePixelComponentMap(PixelComponentMap **),
+ **DestroyPixelComponentMap(PixelComponentMap **);
extern MagickExport PixelInfo
*ClonePixelInfo(const PixelInfo *);
@@ -160,6 +163,8 @@
extern MagickExport void
StandardPixelComponentMap(Image *),
GetPixelInfo(const Image *,PixelInfo *),
+ PopPixelComponentMap(Image *),
+ PushPixelComponentMap(Image *,const ChannelType),
SetPixelComponentMap(Image *,const ChannelType);
#if defined(__cplusplus) || defined(c_plusplus)
diff --git a/MagickCore/version.h b/MagickCore/version.h
index fdb711e..50b9a55 100644
--- a/MagickCore/version.h
+++ b/MagickCore/version.h
@@ -34,7 +34,7 @@
#define MagickLibAddendum "-0"
#define MagickLibInterface 5
#define MagickLibMinInterface 5
-#define MagickReleaseDate "2011-07-06"
+#define MagickReleaseDate "2011-07-07"
#define MagickChangeDate "20110701"
#define MagickAuthoritativeURL "http://www.imagemagick.org"
#if defined(MAGICKCORE_OPENMP_SUPPORT)