diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index bec60a5..13a2ddf 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -136,6 +136,50 @@
return(blur_image);
}
+MagickExport MagickBooleanType AdaptiveLevelImage(Image *image,
+ const char *levels)
+{
+ double
+ black_point,
+ gamma,
+ white_point;
+
+ GeometryInfo
+ geometry_info;
+
+ MagickBooleanType
+ status;
+
+ MagickStatusType
+ flags;
+
+ /*
+ Parse levels.
+ */
+ if (levels == (char *) NULL)
+ return(MagickFalse);
+ flags=ParseGeometry(levels,&geometry_info);
+ black_point=geometry_info.rho;
+ white_point=(double) QuantumRange;
+ if ((flags & SigmaValue) != 0)
+ white_point=geometry_info.sigma;
+ gamma=1.0;
+ if ((flags & XiValue) != 0)
+ gamma=geometry_info.xi;
+ if ((flags & PercentValue) != 0)
+ {
+ black_point*=(double) image->columns*image->rows/100.0;
+ white_point*=(double) image->columns*image->rows/100.0;
+ }
+ if ((flags & SigmaValue) == 0)
+ white_point=(double) QuantumRange-black_point;
+ if ((flags & AspectValue ) == 0)
+ status=LevelImage(image,black_point,white_point,gamma);
+ else
+ status=LevelizeImage(image,black_point,white_point,gamma);
+ return(status);
+}
+
MagickExport Image *AdaptiveBlurImageChannel(const Image *image,
const ChannelType channel,const double radius,const double sigma,
ExceptionInfo *exception)
@@ -205,14 +249,14 @@
blur_image=DestroyImage(blur_image);
return((Image *) NULL);
}
- (void) LevelImage(edge_image,"20%,95%");
+ (void) AdaptiveLevelImage(edge_image,"20%,95%");
gaussian_image=GaussianBlurImage(edge_image,radius,sigma,exception);
if (gaussian_image != (Image *) NULL)
{
edge_image=DestroyImage(edge_image);
edge_image=gaussian_image;
}
- (void) LevelImage(edge_image,"10%,95%");
+ (void) AdaptiveLevelImage(edge_image,"10%,95%");
/*
Create a set of kernels from maximum (radius,sigma) to minimum.
*/
@@ -515,14 +559,14 @@
sharp_image=DestroyImage(sharp_image);
return((Image *) NULL);
}
- (void) LevelImage(edge_image,"20%,95%");
+ (void) AdaptiveLevelImage(edge_image,"20%,95%");
gaussian_image=GaussianBlurImage(edge_image,radius,sigma,exception);
if (gaussian_image != (Image *) NULL)
{
edge_image=DestroyImage(edge_image);
edge_image=gaussian_image;
}
- (void) LevelImage(edge_image,"10%,95%");
+ (void) AdaptiveLevelImage(edge_image,"10%,95%");
/*
Create a set of kernels from maximum (radius,sigma) to minimum.
*/