%
% The format of the AutoGammaImage method is:
%
-% MagickBooleanType AutoGammaImage(Image *image)
+% MagickBooleanType AutoGammaImage(Image *image,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o image: The image to auto-level
%
+% o exception: return any errors or warnings in this structure.
+%
*/
-MagickExport MagickBooleanType AutoGammaImage(Image *image)
+MagickExport MagickBooleanType AutoGammaImage(Image *image,
+ ExceptionInfo *exception)
{
- MagickStatusType
- status;
-
double
gamma,
log_mean,
mean,
sans;
+ MagickStatusType
+ status;
+
log_mean=log(0.5);
if (image->sync != MagickFalse)
{
/*
Apply gamma correction equally accross all given channels.
*/
- (void) GetImageMean(image,&mean,&sans,&image->exception);
+ (void) GetImageMean(image,&mean,&sans,exception);
gamma=log(mean*QuantumScale)/log_mean;
return(LevelImage(image,0.0,(double) QuantumRange,gamma));
}
if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
{
PushPixelChannelMap(image,RedChannel);
- (void) GetImageMean(image,&mean,&sans,&image->exception);
+ (void) GetImageMean(image,&mean,&sans,exception);
gamma=log(mean*QuantumScale)/log_mean;
status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
PopPixelChannelMap(image);
if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
{
PushPixelChannelMap(image,GreenChannel);
- (void) GetImageMean(image,&mean,&sans,&image->exception);
+ (void) GetImageMean(image,&mean,&sans,exception);
gamma=log(mean*QuantumScale)/log_mean;
status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
PopPixelChannelMap(image);
if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
{
PushPixelChannelMap(image,BlueChannel);
- (void) GetImageMean(image,&mean,&sans,&image->exception);
+ (void) GetImageMean(image,&mean,&sans,exception);
gamma=log(mean*QuantumScale)/log_mean;
status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
PopPixelChannelMap(image);
(image->colorspace == CMYKColorspace))
{
PushPixelChannelMap(image,BlackChannel);
- (void) GetImageMean(image,&mean,&sans,&image->exception);
+ (void) GetImageMean(image,&mean,&sans,exception);
gamma=log(mean*QuantumScale)/log_mean;
status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
PopPixelChannelMap(image);
(image->matte == MagickTrue))
{
PushPixelChannelMap(image,AlphaChannel);
- (void) GetImageMean(image,&mean,&sans,&image->exception);
+ (void) GetImageMean(image,&mean,&sans,exception);
gamma=log(mean*QuantumScale)/log_mean;
status=status && LevelImage(image,0.0,(double) QuantumRange,gamma);
PopPixelChannelMap(image);
%
% The format of the LevelImage method is:
%
-% MagickBooleanType AutoLevelImage(Image *image)
+% MagickBooleanType AutoLevelImage(Image *image,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o image: The image to auto-level
%
+% o exception: return any errors or warnings in this structure.
+%
*/
-MagickExport MagickBooleanType AutoLevelImage(Image *image)
+MagickExport MagickBooleanType AutoLevelImage(Image *image,
+ ExceptionInfo *exception)
{
- return(MinMaxStretchImage(image,0.0,0.0));
+ return(MinMaxStretchImage(image,0.0,0.0,exception));
}
\f
/*
#endif
extern MagickExport MagickBooleanType
- AutoGammaImage(Image *),
- AutoLevelImage(Image *),
+ AutoGammaImage(Image *,ExceptionInfo *),
+ AutoLevelImage(Image *,ExceptionInfo *),
BrightnessContrastImage(Image *,const double,const double),
ClutImage(Image *,const Image *),
ColorDecisionListImage(Image *,const char *),
% The format of the MinMaxStretchImage method is:
%
% MagickBooleanType MinMaxStretchImage(Image *image,const double black,
-% const double white)
+% const double white,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o black, white: move the black / white point inward from the minimum and
% maximum points by this color value.
%
+% o exception: return any errors or warnings in this structure.
+%
*/
MagickExport MagickBooleanType MinMaxStretchImage(Image *image,
- const double black,const double white)
+ const double black,const double white,ExceptionInfo *exception)
{
double
min,
/*
Auto-level all channels equally.
*/
- (void) GetImageRange(image,&min,&max,&image->exception);
+ (void) GetImageRange(image,&min,&max,exception);
min+=black;
max-=white;
if (fabs(min-max) >= MagickEpsilon)
if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
{
PushPixelChannelMap(image,RedChannel);
- (void) GetImageRange(image,&min,&max,&image->exception);
+ (void) GetImageRange(image,&min,&max,exception);
min+=black;
max-=white;
if (fabs(min-max) >= MagickEpsilon)
if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
{
PushPixelChannelMap(image,GreenChannel);
- (void) GetImageRange(image,&min,&max,&image->exception);
+ (void) GetImageRange(image,&min,&max,exception);
min+=black;
max-=white;
if (fabs(min-max) >= MagickEpsilon)
if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
{
PushPixelChannelMap(image,BlueChannel);
- (void) GetImageRange(image,&min,&max,&image->exception);
+ (void) GetImageRange(image,&min,&max,exception);
min+=black;
max-=white;
if (fabs(min-max) >= MagickEpsilon)
(image->colorspace == CMYKColorspace))
{
PushPixelChannelMap(image,BlackChannel);
- (void) GetImageRange(image,&min,&max,&image->exception);
+ (void) GetImageRange(image,&min,&max,exception);
min+=black;
max-=white;
if (fabs(min-max) >= MagickEpsilon)
(image->matte == MagickTrue))
{
PushPixelChannelMap(image,AlphaChannel);
- (void) GetImageRange(image,&min,&max,&image->exception);
+ (void) GetImageRange(image,&min,&max,exception);
min+=black;
max-=white;
if (fabs(min-max) >= MagickEpsilon)
extern MagickExport MagickBooleanType
IsHistogramImage(const Image *,ExceptionInfo *),
IsPaletteImage(const Image *,ExceptionInfo *),
- MinMaxStretchImage(Image *,const double,const double);
+ MinMaxStretchImage(Image *,const double,const double,ExceptionInfo *);
extern MagickExport size_t
GetNumberColors(const Image *,FILE *,ExceptionInfo *);
/* #undef AUTOTRACE_DELEGATE */
/* Define if coders and filters are to be built as modules. */
-/* #undef BUILD_MODULES */
+#ifndef MAGICKCORE_BUILD_MODULES
+#define MAGICKCORE_BUILD_MODULES 1
+#endif
/* Define if you have the bzip2 library */
#ifndef MAGICKCORE_BZLIB_DELEGATE
#endif
/* Define if you have FFTW library */
-/* #undef FFTW_DELEGATE */
+#ifndef MAGICKCORE_FFTW_DELEGATE
+#define MAGICKCORE_FFTW_DELEGATE 1
+#endif
/* Location of filter modules */
#ifndef MAGICKCORE_FILTER_PATH
#endif
/* Define if you have the <lcms2.h> header file. */
-#ifndef MAGICKCORE_HAVE_LCMS2_H
-#define MAGICKCORE_HAVE_LCMS2_H 1
-#endif
+/* #undef HAVE_LCMS2_H */
/* Define if you have the <lcms2/lcms2.h> header file. */
/* #undef HAVE_LCMS2_LCMS2_H */
/* Define if you have the <lcms.h> header file. */
-/* #undef HAVE_LCMS_H */
+#ifndef MAGICKCORE_HAVE_LCMS_H
+#define MAGICKCORE_HAVE_LCMS_H 1
+#endif
/* Define if you have the <lcms/lcms.h> header file. */
/* #undef HAVE_LCMS_LCMS_H */
#endif
/* Define if you have JBIG library */
-/* #undef JBIG_DELEGATE */
+#ifndef MAGICKCORE_JBIG_DELEGATE
+#define MAGICKCORE_JBIG_DELEGATE 1
+#endif
/* Define if you have JPEG version 2 "Jasper" library */
#ifndef MAGICKCORE_JP2_DELEGATE
#endif
/* Define if you have LQR library */
-/* #undef LQR_DELEGATE */
+#ifndef MAGICKCORE_LQR_DELEGATE
+#define MAGICKCORE_LQR_DELEGATE 1
+#endif
/* Define if using libltdl to support dynamically loadable modules */
#ifndef MAGICKCORE_LTDL_DELEGATE
/* 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/atlas:/usr/lib64/mysql:/usr/lib64/qt-3.3/lib:/usr/lib64/tcl8.5/tclx8.4:/usr/lib64/tcl8.5:/usr/lib/wine/:/usr/lib64/wine/:/usr/lib64/xulrunner-2"
+#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"
#endif
/* The archive extension */
/* #undef NO_MINUS_C_MINUS_O */
/* Define if you have OPENEXR library */
-/* #undef OPENEXR_DELEGATE */
+#ifndef MAGICKCORE_OPENEXR_DELEGATE
+#define MAGICKCORE_OPENEXR_DELEGATE 1
+#endif
/* Define to the address where bug reports for this package should be sent. */
#ifndef MAGICKCORE_PACKAGE_BUGREPORT
#endif
/* Define if you have RSVG library */
-/* #undef RSVG_DELEGATE */
+#ifndef MAGICKCORE_RSVG_DELEGATE
+#define MAGICKCORE_RSVG_DELEGATE 1
+#endif
/* Define to the type of arg 1 for `select'. */
#ifndef MAGICKCORE_SELECT_TYPE_ARG1
/* Define if you have WEBP library */
-/* #undef WEBP_DELEGATE */
+#ifndef MAGICKCORE_WEBP_DELEGATE
+#define MAGICKCORE_WEBP_DELEGATE 1
+#endif
/* Define to use the Windows GDI32 library */
/* #undef WINGDI32_DELEGATE */
/* #undef WITH_DMALLOC */
/* Define if you have WMF library */
-/* #undef WMF_DELEGATE */
+#ifndef MAGICKCORE_WMF_DELEGATE
+#define MAGICKCORE_WMF_DELEGATE 1
+#endif
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
}
for (x=0; x < (ssize_t) image->columns; x++)
{
- if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
- SetPixelRed(image,(Quantum) ((MagickRealType)
- GetPixelRed(image,q) <= threshold ? 0 : QuantumRange),q);
- if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0)
- SetPixelGreen(image,(Quantum) ((MagickRealType)
- GetPixelGreen(image,q) <= threshold ? 0 : QuantumRange),q);
- if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0)
- SetPixelBlue(image,(Quantum) ((MagickRealType)
- GetPixelBlue(image,q) <= threshold ? 0 : QuantumRange),q);
- if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) &&
- (image->colorspace == CMYKColorspace))
- SetPixelBlack(image,(Quantum) ((MagickRealType)
- GetPixelBlack(image,q) <= threshold ? 0 : QuantumRange),q);
- if ((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0)
- {
- if (image->matte == MagickFalse)
- SetPixelAlpha(image,(Quantum) ((MagickRealType)
- GetPixelAlpha(image,q) <= threshold ? 0 : QuantumRange),q);
- else
- SetPixelAlpha(image,(Quantum) ((MagickRealType)
- GetPixelAlpha(image,q) >= threshold ? OpaqueAlpha :
- TransparentAlpha),q);
- }
+ register ssize_t
+ i;
+
+ for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+ {
+ PixelTrait
+ traits;
+
+ traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
+ if ((traits & UpdatePixelTrait) != 0)
+ q[i]=q[i] <= threshold ? 0 : QuantumRange;
+ }
q+=GetPixelChannels(image);
}
if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
*/
#define MagickPackageName "ImageMagick"
#define MagickCopyright "Copyright (C) 1999-2011 ImageMagick Studio LLC"
-#define MagickSVNRevision "4861"
+#define MagickSVNRevision "exported"
#define MagickLibVersion 0x700
#define MagickLibVersionText "7.0.0"
#define MagickLibVersionNumber 5,0,0
#define MagickLibAddendum "-0"
#define MagickLibInterface 5
#define MagickLibMinInterface 5
-#define MagickReleaseDate "2011-08-05"
+#define MagickReleaseDate "2011-08-09"
#define MagickChangeDate "20110801"
#define MagickAuthoritativeURL "http://www.imagemagick.org"
#if defined(MAGICKCORE_OPENMP_SUPPORT)
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- status=AutoGammaImage(wand->images);
- if (status == MagickFalse)
- InheritException(wand->exception,&wand->images->exception);
+ status=AutoGammaImage(wand->images,&wand->images->exception);
return(status);
}
\f
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- status=AutoLevelImage(wand->images);
- if (status == MagickFalse)
- InheritException(wand->exception,&wand->images->exception);
+ status=AutoLevelImage(wand->images,&wand->images->exception);
return(status);
}
\f
Auto Adjust Gamma of image based on its mean
*/
(void) SyncImageSettings(mogrify_info,*image);
- (void) AutoGammaImage(*image);
+ (void) AutoGammaImage(*image,exception);
break;
}
if (LocaleCompare("auto-level",option+1) == 0)
Perfectly Normalize (max/min stretch) the image
*/
(void) SyncImageSettings(mogrify_info,*image);
- (void) AutoLevelImage(*image);
+ (void) AutoLevelImage(*image,exception);
break;
}
if (LocaleCompare("auto-orient",option+1) == 0)
if (attribute_flag[0] != 0)
channel=(ChannelType) argument_list[0].integer_reference;
PushPixelChannelMap(image,channel);
- (void) AutoGammaImage(image);
+ (void) AutoGammaImage(image,exception);
PopPixelChannelMap(image);
break;
}
if (attribute_flag[0] != 0)
channel=(ChannelType) argument_list[0].integer_reference;
PushPixelChannelMap(image,channel);
- (void) AutoLevelImage(image);
+ (void) AutoLevelImage(image,exception);
PopPixelChannelMap(image);
break;
}