#define OptimizePlusImageLayers PrependMagickMethod(OptimizePlusImageLayers)
#define OrderedDitherImageChannel PrependMagickMethod(OrderedDitherImageChannel)
#define OrderedDitherImage PrependMagickMethod(OrderedDitherImage)
-#define OrderedPosterizeImageChannel PrependMagickMethod(OrderedPosterizeImageChannel)
+#define OrderedPosterizeImage PrependMagickMethod(OrderedPosterizeImage)
#define OrderedPosterizeImage PrependMagickMethod(OrderedPosterizeImage)
#define PackbitsEncodeImage PrependMagickMethod(PackbitsEncodeImage)
#define PaintFloodfillImage PrependMagickMethod(PaintFloodfillImage)
%
% MagickBooleanType PosterizeImage(Image *image,const size_t levels,
% const MagickBooleanType dither)
-% MagickBooleanType PosterizeImageChannel(Image *image,
-% const ChannelType channel,const size_t levels,
-% const MagickBooleanType dither)
%
% A description of each parameter follows:
%
MagickExport MagickBooleanType PosterizeImage(Image *image,const size_t levels,
const MagickBooleanType dither)
-{
- MagickBooleanType
- status;
-
- status=PosterizeImageChannel(image,DefaultChannels,levels,dither);
- return(status);
-}
-
-MagickExport MagickBooleanType PosterizeImageChannel(Image *image,
- const ChannelType channel,const size_t levels,const MagickBooleanType dither)
{
#define PosterizeImageTag "Posterize/Image"
#define PosterizePixel(pixel) (Quantum) (QuantumRange*(MagickRound( \
proceed;
#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp critical (MagickCore_PosterizeImageChannel)
+ #pragma omp critical (MagickCore_PosterizeImage)
#endif
proceed=SetImageProgress(image,PosterizeImageTag,progress++,
image->rows);
CompressImageColormap(Image *),
GetImageQuantizeError(Image *),
PosterizeImage(Image *,const size_t,const MagickBooleanType),
- PosterizeImageChannel(Image *,const ChannelType,const size_t,
- const MagickBooleanType),
QuantizeImage(const QuantizeInfo *,Image *),
QuantizeImages(const QuantizeInfo *,Image *),
RemapImage(const QuantizeInfo *,Image *,const Image *),
%
% MagickBooleanType OrderedPosterizeImage(Image *image,
% const char *threshold_map,ExceptionInfo *exception)
-% MagickBooleanType OrderedPosterizeImageChannel(Image *image,
-% const ChannelType channel,const char *threshold_map,
-% ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o image: the image.
%
-% o channel: the channel or channels to be thresholded.
-%
% o threshold_map: A string containing the name of the threshold dither
% map to use, followed by zero or more numbers representing the number
% of color levels tho dither between.
*/
MagickExport MagickBooleanType OrderedPosterizeImage(Image *image,
const char *threshold_map,ExceptionInfo *exception)
-{
- MagickBooleanType
- status;
-
- status=OrderedPosterizeImageChannel(image,DefaultChannels,threshold_map,
- exception);
- return(status);
-}
-
-MagickExport MagickBooleanType OrderedPosterizeImageChannel(Image *image,
- const ChannelType channel,const char *threshold_map,ExceptionInfo *exception)
{
#define DitherImageTag "Dither/Image"
char *p;
p = strchr((char *) threshold_map,',');
+ levels.red=0;
+ levels.green=0;
+ levels.blue=0;
+ levels.black=0;
+ levels.alpha=0;
if ( p != (char *)NULL && isdigit((int) ((unsigned char) *(++p))) )
levels.black = (unsigned int) strtoul(p, &p, 10);
else
levels.black = 2;
- levels.red = ((channel & RedChannel ) != 0) ? levels.black : 0;
- levels.green = ((channel & GreenChannel) != 0) ? levels.black : 0;
- levels.blue = ((channel & BlueChannel) != 0) ? levels.black : 0;
- levels.black = ((channel & BlackChannel) != 0 &&
- (image->colorspace == CMYKColorspace)) ? levels.black : 0;
- levels.alpha = ((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) ? levels.black : 0;
+ if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
+ levels.red=levels.black;
+ if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
+ levels.green=levels.black;
+ if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
+ levels.blue=levels.black;
+ if (((GetPixelBlackTraits(image) & ActivePixelTrait) != 0) &&
+ (image->colorspace == CMYKColorspace))
+ levels.black=levels.black;
+ if (((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0) &&
+ (image->matte != MagickFalse))
+ levels.alpha=levels.black;
/* if more than a single number, each channel has a separate value */
if ( p != (char *) NULL && *p == ',' ) {
proceed;
#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp critical (MagickCore_OrderedPosterizeImageChannel)
+ #pragma omp critical (MagickCore_OrderedPosterizeImage)
#endif
proceed=SetImageProgress(image,DitherImageTag,progress++,image->rows);
if (proceed == MagickFalse)
/*
Backward Compatibility -- ordered-dither -- IM v 6.2.9-6.
*/
- status=OrderedPosterizeImageChannel(image,channel,thresholds,exception);
+ status=OrderedPosterizeImage(image,thresholds,exception);
return(status);
}
/*
ClampImageChannel(Image *,const ChannelType),
ListThresholdMaps(FILE *,ExceptionInfo *),
OrderedPosterizeImage(Image *,const char *,ExceptionInfo *),
- OrderedPosterizeImageChannel(Image *,const ChannelType,const char *,
- ExceptionInfo *),
RandomThresholdImage(Image *,const char *,ExceptionInfo *),
RandomThresholdImageChannel(Image *,const ChannelType,const char *,
ExceptionInfo *),
%
% MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand,
% const char *threshold_map)
-% MagickBooleanType MagickOrderedPosterizeImageChannel(MagickWand *wand,
-% const ChannelType channel,const char *threshold_map)
%
% A description of each parameter follows:
%
% o image: the image.
%
-% o channel: the channel or channels to be thresholded.
-%
% o threshold_map: A string containing the name of the threshold dither
% map to use, followed by zero or more numbers representing the number of
% color levels tho dither between.
% minimim of dithering.
%
*/
-
WandExport MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand,
const char *threshold_map)
{
MagickBooleanType
status;
- status=MagickOrderedPosterizeImageChannel(wand,DefaultChannels,threshold_map);
- return(status);
-}
-
-WandExport MagickBooleanType MagickOrderedPosterizeImageChannel(
- MagickWand *wand,const ChannelType channel,const char *threshold_map)
-{
- MagickBooleanType
- status;
-
assert(wand != (MagickWand *) NULL);
assert(wand->signature == WandSignature);
if (wand->debug != MagickFalse)
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- status=OrderedPosterizeImageChannel(wand->images,channel,threshold_map,
- wand->exception);
+ status=OrderedPosterizeImage(wand->images,threshold_map,wand->exception);
return(status);
}
\f
MagickOpaquePaintImageChannel(MagickWand *,const ChannelType,
const PixelWand *,const PixelWand *,const double,const MagickBooleanType),
MagickOrderedPosterizeImage(MagickWand *,const char *),
- MagickOrderedPosterizeImageChannel(MagickWand *,const ChannelType,
- const char *),
MagickTransparentPaintImage(MagickWand *,const PixelWand *,
const double,const double,const MagickBooleanType invert),
MagickPingImage(MagickWand *,const char *),
if (LocaleCompare("ordered-dither",option+1) == 0)
{
(void) SyncImageSettings(mogrify_info,*image);
- (void) OrderedPosterizeImageChannel(*image,channel,argv[i+1],
- exception);
+ (void) OrderedPosterizeImage(*image,argv[i+1],exception);
break;
}
break;
argument_list[0].string_reference="o8x8";
if (attribute_flag[1] != 0)
channel=(ChannelType) argument_list[1].integer_reference;
- (void) OrderedPosterizeImageChannel(image,channel,
- argument_list[0].string_reference,exception);
+ PushPixelComponentMap(image,channel);
+ (void) OrderedPosterizeImage(image,argument_list[0].string_reference,
+ exception);
+ PopPixelComponentMap(image);
break;
}
case 72: /* Shave */