diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp
index 8f20750..9a2c1b0 100644
--- a/Magick++/lib/Image.cpp
+++ b/Magick++/lib/Image.cpp
@@ -1146,8 +1146,12 @@
// Gamma correct image
void Magick::Image::gamma ( const double gamma_ )
{
+ ExceptionInfo exceptionInfo;
+ GetExceptionInfo( &exceptionInfo );
modifyImage();
- GammaImage ( image(), gamma_ );
+ GammaImage ( image(), gamma_, &exceptionInfo );
+ throwException( exceptionInfo );
+ (void) DestroyExceptionInfo( &exceptionInfo );
}
void Magick::Image::gamma ( const double gammaRed_,
@@ -1158,9 +1162,12 @@
FormatLocaleString( gamma, MaxTextExtent, "%3.6f/%3.6f/%3.6f/",
gammaRed_, gammaGreen_, gammaBlue_);
+ ExceptionInfo exceptionInfo;
+ GetExceptionInfo( &exceptionInfo );
modifyImage();
- GammaImage ( image(), atof(gamma) );
- throwImageException();
+ GammaImage ( image(), atof(gamma), &exceptionInfo );
+ throwException( exceptionInfo );
+ (void) DestroyExceptionInfo( &exceptionInfo );
}
// Gaussian blur image
@@ -1361,9 +1368,13 @@
// only
void Magick::Image::negate ( const bool grayscale_ )
{
+ ExceptionInfo exceptionInfo;
+ GetExceptionInfo( &exceptionInfo );
modifyImage();
- NegateImage ( image(), grayscale_ == true ? MagickTrue : MagickFalse );
- throwImageException();
+ NegateImage ( image(), grayscale_ == true ? MagickTrue : MagickFalse,
+ &exceptionInfo );
+ throwException( exceptionInfo );
+ (void) DestroyExceptionInfo( &exceptionInfo );
}
// Normalize image
diff --git a/MagickCore/display.c b/MagickCore/display.c
index a059951..5c0b508 100644
--- a/MagickCore/display.c
+++ b/MagickCore/display.c
@@ -7770,7 +7770,7 @@
*/
XSetCursorState(display,windows,MagickTrue);
XCheckRefreshWindows(display,windows);
- (void) GammaImage(*image,atof(factor));
+ (void) GammaImage(*image,atof(factor),&(*image)->exception);
XSetCursorState(display,windows,MagickFalse);
if (windows->image.orphan != MagickFalse)
break;
@@ -7920,7 +7920,7 @@
*/
XSetCursorState(display,windows,MagickTrue);
XCheckRefreshWindows(display,windows);
- (void) NegateImage(*image,MagickFalse);
+ (void) NegateImage(*image,MagickFalse,&(*image)->exception);
XSetCursorState(display,windows,MagickFalse);
if (windows->image.orphan != MagickFalse)
break;
diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index 975f9d5..bdad058 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -1431,7 +1431,7 @@
(void) QueryColorDatabase("#ffffff",&clone_info->fill,&image->exception);
clone_info->clip_mask=(char *) NULL;
status=DrawImage(image->clip_mask,clone_info);
- status|=NegateImage(image->clip_mask,MagickFalse);
+ status|=NegateImage(image->clip_mask,MagickFalse,&image->exception);
clone_info=DestroyDrawInfo(clone_info);
if (image->debug != MagickFalse)
(void) LogMagickEvent(DrawEvent,GetMagickModule(),"end clip-path");
diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 7a612aa..899005f 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -2469,7 +2469,7 @@
if (preview_image == (Image *) NULL)
break;
gamma+=0.4f;
- (void) GammaImage(preview_image,gamma);
+ (void) GammaImage(preview_image,gamma,exception);
(void) FormatLocaleString(label,MaxTextExtent,"gamma %g",gamma);
break;
}
diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c
index 7422ada..16b29d0 100644
--- a/MagickCore/enhance.c
+++ b/MagickCore/enhance.c
@@ -1906,7 +1906,8 @@
%
% The format of the GammaImage method is:
%
-% MagickBooleanType GammaImage(Image *image,const double gamma)
+% MagickBooleanType GammaImage(Image *image,const double gamma,
+% ExceptionInfo *exception)
%
% A description of each parameter follows:
%
@@ -1917,16 +1918,14 @@
% o gamma: the image gamma.
%
*/
-MagickExport MagickBooleanType GammaImage(Image *image,const double gamma)
+MagickExport MagickBooleanType GammaImage(Image *image,const double gamma,
+ ExceptionInfo *exception)
{
#define GammaCorrectImageTag "GammaCorrect/Image"
CacheView
*image_view;
- ExceptionInfo
- *exception;
-
MagickBooleanType
status;
@@ -1992,7 +1991,6 @@
*/
status=MagickTrue;
progress=0;
- exception=(&image->exception);
image_view=AcquireCacheView(image);
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp parallel for schedule(dynamic,4) shared(progress,status)
@@ -3100,7 +3098,7 @@
% The format of the NegateImage method is:
%
% MagickBooleanType NegateImage(Image *image,
-% const MagickBooleanType grayscale)
+% const MagickBooleanType grayscale,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
@@ -3108,18 +3106,17 @@
%
% o grayscale: If MagickTrue, only negate grayscale pixels within the image.
%
+% o exception: return any errors or warnings in this structure.
+%
*/
MagickExport MagickBooleanType NegateImage(Image *image,
- const MagickBooleanType grayscale)
+ const MagickBooleanType grayscale,ExceptionInfo *exception)
{
#define NegateImageTag "Negate/Image"
CacheView
*image_view;
- ExceptionInfo
- *exception;
-
MagickBooleanType
status;
@@ -3166,7 +3163,6 @@
*/
status=MagickTrue;
progress=0;
- exception=(&image->exception);
image_view=AcquireCacheView(image);
if (grayscale != MagickFalse)
{
diff --git a/MagickCore/enhance.h b/MagickCore/enhance.h
index 9965656..9fbb6f9 100644
--- a/MagickCore/enhance.h
+++ b/MagickCore/enhance.h
@@ -31,7 +31,7 @@
ContrastImage(Image *,const MagickBooleanType),
ContrastStretchImage(Image *,const double,const double),
EqualizeImage(Image *image),
- GammaImage(Image *,const double),
+ GammaImage(Image *,const double,ExceptionInfo *),
HaldClutImage(Image *,const Image *),
LevelImage(Image *,const double,const double,const double),
LevelizeImage(Image *,const double,const double,const double),
@@ -39,7 +39,7 @@
const MagickBooleanType),
LinearStretchImage(Image *,const double,const double),
ModulateImage(Image *,const char *),
- NegateImage(Image *,const MagickBooleanType),
+ NegateImage(Image *,const MagickBooleanType,ExceptionInfo *),
NormalizeImage(Image *),
SigmoidalContrastImage(Image *,const MagickBooleanType,const double,
const double);
diff --git a/MagickCore/fx.c b/MagickCore/fx.c
index 836e43f..db0b32b 100644
--- a/MagickCore/fx.c
+++ b/MagickCore/fx.c
@@ -651,7 +651,7 @@
if (charcoal_image == (Image *) NULL)
return((Image *) NULL);
(void) NormalizeImage(charcoal_image);
- (void) NegateImage(charcoal_image,MagickFalse);
+ (void) NegateImage(charcoal_image,MagickFalse,exception);
(void) SetImageType(charcoal_image,GrayscaleType);
return(charcoal_image);
}
@@ -4334,7 +4334,7 @@
if (dodge_image == (Image *) NULL)
return((Image *) NULL);
(void) NormalizeImage(dodge_image);
- (void) NegateImage(dodge_image,MagickFalse);
+ (void) NegateImage(dodge_image,MagickFalse,exception);
(void) TransformImage(&dodge_image,(char *) NULL,"50%");
sketch_image=CloneImage(image,0,0,MagickTrue,exception);
if (sketch_image == (Image *) NULL)
diff --git a/MagickCore/image.c b/MagickCore/image.c
index 6978ea9..1a2fcb0 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -699,7 +699,7 @@
return(MagickFalse);
}
if (inside == MagickFalse)
- (void) NegateImage(clip_mask,MagickFalse);
+ (void) NegateImage(clip_mask,MagickFalse,&image->exception);
(void) FormatLocaleString(clip_mask->magick_filename,MaxTextExtent,
"8BIM:1999,2998:%s\nPS",pathname);
(void) SetImageClipMask(image,clip_mask);
diff --git a/MagickCore/montage.c b/MagickCore/montage.c
index 26050b9..ce28374 100644
--- a/MagickCore/montage.c
+++ b/MagickCore/montage.c
@@ -759,7 +759,7 @@
(image->compose == DstOutCompositeOp))
{
SetPixelChannelMap(image,AlphaChannel);
- (void) NegateImage(image,MagickFalse);
+ (void) NegateImage(image,MagickFalse,exception);
SetPixelChannelMap(image,DefaultChannels);
}
}
diff --git a/MagickCore/version.h b/MagickCore/version.h
index f2afe07..6f2323e 100644
--- a/MagickCore/version.h
+++ b/MagickCore/version.h
@@ -34,8 +34,8 @@
#define MagickLibAddendum "-0"
#define MagickLibInterface 5
#define MagickLibMinInterface 5
-#define MagickReleaseDate "2011-07-18"
-#define MagickChangeDate "20110701"
+#define MagickReleaseDate "2011-07-23"
+#define MagickChangeDate "20110721"
#define MagickAuthoritativeURL "http://www.imagemagick.org"
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#define MagickOpenMPFeature "OpenMP "
diff --git a/MagickWand/composite.c b/MagickWand/composite.c
index ab4674b..91fff18 100644
--- a/MagickWand/composite.c
+++ b/MagickWand/composite.c
@@ -1647,7 +1647,7 @@
Set a blending mask for the composition.
*/
images->mask=mask_image;
- (void) NegateImage(images->mask,MagickFalse);
+ (void) NegateImage(images->mask,MagickFalse,exception);
}
}
status&=CompositeImageList(image_info,&images,composite_image,
diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c
index 4582b6c..3ed737c 100644
--- a/MagickWand/magick-image.c
+++ b/MagickWand/magick-image.c
@@ -3336,9 +3336,7 @@
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- status=GammaImage(wand->images,gamma);
- if (status == MagickFalse)
- InheritException(wand->exception,&wand->images->exception);
+ status=GammaImage(wand->images,gamma,wand->exception);
return(status);
}
@@ -6672,9 +6670,7 @@
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- status=NegateImage(wand->images,gray);
- if (status == MagickFalse)
- InheritException(wand->exception,&wand->images->exception);
+ status=NegateImage(wand->images,gray,wand->exception);
return(status);
}
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 7eaf121..c3fc353 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -1688,11 +1688,8 @@
if (*option == '+')
(*image)->gamma=InterpretLocaleValue(argv[i+1],(char **) NULL);
else
- {
- (void) GammaImage(*image,InterpretLocaleValue(argv[i+1],
- (char **) NULL));
- InheritException(exception,&(*image)->exception);
- }
+ (void) GammaImage(*image,InterpretLocaleValue(argv[i+1],
+ (char **) NULL),exception);
break;
}
if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
@@ -2126,8 +2123,7 @@
{
(void) SyncImageSettings(mogrify_info,*image);
(void) NegateImage(*image,*option == '+' ? MagickTrue :
- MagickFalse);
- InheritException(exception,&(*image)->exception);
+ MagickFalse,exception);
break;
}
if (LocaleCompare("noise",option+1) == 0)
@@ -7420,7 +7416,7 @@
*/
/* POSIBLE ERROR; what if image->mask already set */
image->mask=mask_image;
- (void) NegateImage(image->mask,MagickFalse);
+ (void) NegateImage(image->mask,MagickFalse,exception);
}
}
(void) CompositeImage(image,image->compose,composite_image,
diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs
index 60e3b9c..a5be949 100644
--- a/PerlMagick/Magick.xs
+++ b/PerlMagick/Magick.xs
@@ -8340,7 +8340,7 @@
*/
image->mask=CloneImage(argument_list[10].image_reference,0,0,
MagickTrue,&image->exception);
- (void) NegateImage(image->mask,MagickFalse);
+ (void) NegateImage(image->mask,MagickFalse,exception);
}
}
if (attribute_flag[11] != 0) /* channel */
@@ -8664,7 +8664,7 @@
argument_list[0].string_reference=message;
}
(void) GammaImage(image,InterpretLocaleValue(
- argument_list[0].string_reference,(char **) NULL));
+ argument_list[0].string_reference,(char **) NULL),exception);
break;
}
case 41: /* Map */
@@ -8782,7 +8782,7 @@
channel=(ChannelType) argument_list[1].integer_reference;
PushPixelChannelMap(image,channel);
(void) NegateImage(image,argument_list[0].integer_reference != 0 ?
- MagickTrue : MagickFalse);
+ MagickTrue : MagickFalse,exception);
PopPixelChannelMap(image);
break;
}
@@ -10043,7 +10043,7 @@
}
image->clip_mask=CloneImage(argument_list[0].image_reference,0,0,
MagickTrue,exception);
- (void) NegateImage(image->clip_mask,MagickFalse);
+ (void) NegateImage(image->clip_mask,MagickFalse,exception);
break;
}
case 107: /* LinearStretch */
@@ -10085,7 +10085,7 @@
}
image->mask=CloneImage(argument_list[0].image_reference,0,0,
MagickTrue,exception);
- (void) NegateImage(image->mask,MagickFalse);
+ (void) NegateImage(image->mask,MagickFalse,exception);
break;
}
case 110: /* Polaroid */
diff --git a/coders/msl.c b/coders/msl.c
index 3657506..91a26b5 100644
--- a/coders/msl.c
+++ b/coders/msl.c
@@ -3229,7 +3229,8 @@
if (*gamma == '\0')
(void) FormatLocaleString(gamma,MaxTextExtent,"%g,%g,%g",
(double) pixel.red,(double) pixel.green,(double) pixel.blue);
- (void) GammaImage(msl_info->image[n],atof(gamma));
+ (void) GammaImage(msl_info->image[n],atof(gamma),
+ &msl_info->image[n]->exception);
break;
}
else if (LocaleCompare((const char *) tag,"get") == 0)
@@ -4037,7 +4038,8 @@
}
}
PushPixelChannelMap(msl_info->image[n],channel);
- (void) NegateImage(msl_info->image[n],gray);
+ (void) NegateImage(msl_info->image[n],gray,
+ &msl_info->image[n]->exception);
PopPixelChannelMap(msl_info->image[n]);
break;
}
diff --git a/coders/psd.c b/coders/psd.c
index 6b3e793..557b937 100644
--- a/coders/psd.c
+++ b/coders/psd.c
@@ -1324,7 +1324,7 @@
}
}
if (layer_info[i].image->colorspace == CMYKColorspace)
- (void) NegateImage(layer_info[i].image,MagickFalse);
+ (void) NegateImage(layer_info[i].image,MagickFalse,exception);
status=SetImageProgress(image,LoadImagesTag,i,(MagickSizeType)
number_layers);
if (status == MagickFalse)
@@ -1432,7 +1432,7 @@
if (compression == 1)
offsets=(MagickOffsetType *) RelinquishMagickMemory(offsets);
if (image->colorspace == CMYKColorspace)
- (void) NegateImage(image,MagickFalse);
+ (void) NegateImage(image,MagickFalse,exception);
(void) CloseBlob(image);
return(GetFirstImageInList(image));
}
@@ -1835,7 +1835,7 @@
else
{
if (next_image->colorspace == CMYKColorspace)
- (void) NegateImage(next_image,MagickFalse);
+ (void) NegateImage(next_image,MagickFalse,&next_image->exception);
if (next_image->compression == RLECompression)
{
/*
@@ -1879,7 +1879,7 @@
MagickFalse);
(void) SetImageProgress(image,SaveImagesTag,5,6);
if (next_image->colorspace == CMYKColorspace)
- (void) NegateImage(next_image,MagickFalse);
+ (void) NegateImage(next_image,MagickFalse,&next_image->exception);
}
if (next_image->compression == RLECompression)
compact_pixels=(unsigned char *) RelinquishMagickMemory(compact_pixels);