% The format of the ShadowImage method is:
%
% Image *ShadowImage(const Image *image,const double opacity,
-% const double sigma,const ssize_t x_offset,const ssize_t y_offset,
-% ExceptionInfo *exception)
+% const double sigma,const double bias,const ssize_t x_offset,
+% const ssize_t y_offset,ExceptionInfo *exception)
%
% A description of each parameter follows:
%
%
% o sigma: the standard deviation of the Gaussian, in pixels.
%
+% o bias: the bias.
+%
% o x_offset: the shadow x-offset.
%
% o y_offset: the shadow y-offset.
%
*/
MagickExport Image *ShadowImage(const Image *image,const double opacity,
- const double sigma,const ssize_t x_offset,const ssize_t y_offset,
- ExceptionInfo *exception)
+ const double sigma,const double bias,const ssize_t x_offset,
+ const ssize_t y_offset,ExceptionInfo *exception)
{
#define ShadowImageTag "Shadow/Image"
*/
(void) SetImageBackgroundColor(border_image,exception);
channel_mask=SetPixelChannelMask(border_image,AlphaChannel);
- shadow_image=BlurImage(border_image,0.0,sigma,image->bias,exception);
+ shadow_image=BlurImage(border_image,0.0,sigma,bias,exception);
(void) SetPixelChannelMapMask(border_image,channel_mask);
border_image=DestroyImage(border_image);
if (shadow_image == (Image *) NULL)
% The format of the VignetteImage method is:
%
% Image *VignetteImage(const Image *image,const double radius,
-% const double sigma,const ssize_t x,const ssize_t y,
+% const double sigma,const double bias,const ssize_t x,const ssize_t y,
% ExceptionInfo *exception)
%
% A description of each parameter follows:
%
% o sigma: the standard deviation of the Gaussian, in pixels.
%
+% o bias: the bias.
+%
% o x, y: Define the x and y ellipse offset.
%
% o exception: return any errors or warnings in this structure.
%
*/
MagickExport Image *VignetteImage(const Image *image,const double radius,
- const double sigma,const ssize_t x,const ssize_t y,ExceptionInfo *exception)
+ const double sigma,const double bias,const ssize_t x,const ssize_t y,
+ ExceptionInfo *exception)
{
char
ellipse[MaxTextExtent];
draw_info->primitive=AcquireString(ellipse);
(void) DrawImage(oval_image,draw_info,exception);
draw_info=DestroyDrawInfo(draw_info);
- blur_image=BlurImage(oval_image,radius,sigma,image->bias,exception);
+ blur_image=BlurImage(oval_image,radius,sigma,bias,exception);
oval_image=DestroyImage(oval_image);
if (blur_image == (Image *) NULL)
{
*PolaroidImage(const Image *,const DrawInfo *,const double,
const PixelInterpolateMethod,ExceptionInfo *),
*SepiaToneImage(const Image *,const double,ExceptionInfo *),
- *ShadowImage(const Image *,const double,const double,const ssize_t,
- const ssize_t,ExceptionInfo *),
+ *ShadowImage(const Image *,const double,const double,const double,
+ const ssize_t,const ssize_t,ExceptionInfo *),
*SketchImage(const Image *,const double,const double,const double,
const double,ExceptionInfo *),
*SteganoImage(const Image *,const Image *,ExceptionInfo *),
*SwirlImage(const Image *,double,const PixelInterpolateMethod,
ExceptionInfo *),
*TintImage(const Image *,const char *,const PixelInfo *,ExceptionInfo *),
- *VignetteImage(const Image *,const double,const double,const ssize_t,
- const ssize_t,ExceptionInfo *),
+ *VignetteImage(const Image *,const double,const double,const double,
+ const ssize_t,const ssize_t,ExceptionInfo *),
*WaveImage(const Image *,const double,const double,
const PixelInterpolateMethod,ExceptionInfo *);
*/
(void) QueryColorCompliance("#00000000",AllCompliance,
&image->background_color,exception);
- shadow_image=ShadowImage(image,80.0,2.0,5,5,exception);
+ shadow_image=ShadowImage(image,80.0,2.0,0.0,5,5,exception);
if (shadow_image != (Image *) NULL)
{
(void) CompositeImage(shadow_image,OverCompositeOp,image,0,0,
% The format of the MagickShadowImage method is:
%
% MagickBooleanType MagickShadowImage(MagickWand *wand,
-% const double alpha,const double sigma,const ssize_t x,const ssize_t y)
+% const double alpha,const double sigma,const double bias,
+% const ssize_t x,const ssize_t y)
%
% A description of each parameter follows:
%
%
% o sigma: the standard deviation of the Gaussian, in pixels.
%
+% o bias: the bias.
+%
% o x: the shadow x-offset.
%
% o y: the shadow y-offset.
%
*/
WandExport MagickBooleanType MagickShadowImage(MagickWand *wand,
- const double alpha,const double sigma,const ssize_t x,const ssize_t y)
+ const double alpha,const double sigma,const double bias,const ssize_t x,
+ const ssize_t y)
{
Image
*shadow_image;
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- shadow_image=ShadowImage(wand->images,alpha,sigma,x,y,wand->exception);
+ shadow_image=ShadowImage(wand->images,alpha,sigma,bias,x,y,wand->exception);
if (shadow_image == (Image *) NULL)
return(MagickFalse);
ReplaceImageInList(&wand->images,shadow_image);
% The format of the MagickVignetteImage method is:
%
% MagickBooleanType MagickVignetteImage(MagickWand *wand,
-% const double black_point,const double white_point,const ssize_t x,
-% const ssize_t y)
+% const double radius,const double sigma,const double bias,
+% const ssize_t x,const ssize_t y)
%
% A description of each parameter follows:
%
% o wand: the magick wand.
%
-% o black_point: the black point.
+% o radius: the radius.
%
-% o white_point: the white point.
+% o sigma: the sigma.
+%
+% o bias: the bias.
%
% o x, y: Define the x and y ellipse offset.
%
*/
WandExport MagickBooleanType MagickVignetteImage(MagickWand *wand,
- const double black_point,const double white_point,const ssize_t x,const ssize_t y)
+ const double radius,const double sigma,const double bias,const ssize_t x,
+ const ssize_t y)
{
Image
*vignette_image;
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
if (wand->images == (Image *) NULL)
ThrowWandException(WandError,"ContainsNoImages",wand->name);
- vignette_image=VignetteImage(wand->images,black_point,white_point,x,y,
+ vignette_image=VignetteImage(wand->images,radius,sigma,bias,x,y,
wand->exception);
if (vignette_image == (Image *) NULL)
return(MagickFalse);
MagickSetImageWhitePoint(MagickWand *,const double,const double),
MagickShadeImage(MagickWand *,const MagickBooleanType,const double,
const double),
- MagickShadowImage(MagickWand *,const double,const double,const ssize_t,
- const ssize_t),
+ MagickShadowImage(MagickWand *,const double,const double,const double,
+ const ssize_t,const ssize_t),
MagickSharpenImage(MagickWand *,const double,const double,const double),
MagickShaveImage(MagickWand *,const size_t,const size_t),
MagickShearImage(MagickWand *,const PixelWand *,const double,const double),
MagickUniqueImageColors(MagickWand *),
MagickUnsharpMaskImage(MagickWand *,const double,const double,const double,
const double),
- MagickVignetteImage(MagickWand *,const double,const double,const ssize_t,
- const ssize_t),
+ MagickVignetteImage(MagickWand *,const double,const double,const double,
+ const ssize_t,const ssize_t),
MagickWaveImage(MagickWand *,const double,const double,
const PixelInterpolateMethod),
MagickWhiteThresholdImage(MagickWand *,const PixelWand *),
if ((flags & PsiValue) == 0)
geometry_info.psi=4.0;
mogrify_image=ShadowImage(*image,geometry_info.rho,
- geometry_info.sigma,(ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
- ceil(geometry_info.psi-0.5),exception);
+ geometry_info.sigma,(*image)->bias,(ssize_t)
+ ceil(geometry_info.xi-0.5),(ssize_t) ceil(geometry_info.psi-0.5),
+ exception);
break;
}
if (LocaleCompare("sharpen",option+1) == 0)
if ((flags & PsiValue) == 0)
geometry_info.psi=0.1*(*image)->rows;
mogrify_image=VignetteImage(*image,geometry_info.rho,
- geometry_info.sigma,(ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
- ceil(geometry_info.psi-0.5),exception);
+ geometry_info.sigma,(*image)->bias,(ssize_t)
+ ceil(geometry_info.xi-0.5),(ssize_t) ceil(geometry_info.psi-0.5),
+ exception);
break;
}
if (LocaleCompare("virtual-pixel",option+1) == 0)
if ((flags & PsiValue) == 0)
geometry_info.psi=4.0;
new_image=ShadowImage(*image,geometry_info.rho,
- geometry_info.sigma,(ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
- ceil(geometry_info.psi-0.5),exception);
+ geometry_info.sigma,(*image)->bias,(ssize_t)
+ ceil(geometry_info.xi-0.5),(ssize_t) ceil(geometry_info.psi-0.5),
+ exception);
break;
}
if (LocaleCompare("sharpen",option) == 0)
if ((flags & PsiValue) == 0)
geometry_info.psi=0.1*(*image)->rows;
new_image=VignetteImage(*image,geometry_info.rho,
- geometry_info.sigma,(ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
- ceil(geometry_info.psi-0.5),exception);
+ geometry_info.sigma,(*image)->bias,(ssize_t)
+ ceil(geometry_info.xi-0.5),(ssize_t) ceil(geometry_info.psi-0.5),
+ exception);
break;
}
if (LocaleCompare("virtual-pixel",option) == 0)
{"background", StringReference}, {"gravity", MagickGravityOptions} } },
{ "Posterize", { {"levels", IntegerReference},
{"dither", MagickBooleanOptions} } },
- { "Shadow", { {"geometry", StringReference}, {"opacity", RealReference},
+ { "Shadow", { {"geometry", StringReference}, {"alpha", RealReference},
{"sigma", RealReference}, {"x", IntegerReference},
{"y", IntegerReference} } },
{ "Identify", { {"file", FileReference}, {"features", StringReference},
geometry_info.xi=argument_list[3].integer_reference;
if (attribute_flag[4] != 0)
geometry_info.psi=argument_list[4].integer_reference;
- image=ShadowImage(image,geometry_info.rho,geometry_info.sigma,
- (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t) ceil(geometry_info.psi-
- 0.5),exception);
+ image=ShadowImage(image,geometry_info.rho,geometry_info.sigma,0.0,
+ (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
+ ceil(geometry_info.psi-0.5),exception);
break;
}
case 90: /* Identify */
if (attribute_flag[5] != 0)
(void) QueryColorCompliance(argument_list[5].string_reference,
AllCompliance,&image->background_color,exception);
- image=VignetteImage(image,geometry_info.rho,geometry_info.sigma,
- (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t) ceil(geometry_info.psi-
- 0.5),exception);
+ image=VignetteImage(image,geometry_info.rho,geometry_info.sigma,0.0,
+ (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
+ ceil(geometry_info.psi-0.5),exception);
break;
}
case 95: /* ContrastStretch */
}
}
shadow_image=ShadowImage(msl_info->image[n],geometry_info.rho,
- geometry_info.sigma,(ssize_t) ceil(geometry_info.xi-0.5),(ssize_t)
- ceil(geometry_info.psi-0.5),msl_info->exception);
+ geometry_info.sigma,0.0,(ssize_t) ceil(geometry_info.xi-0.5),
+ (ssize_t) ceil(geometry_info.psi-0.5),msl_info->exception);
if (shadow_image == (Image *) NULL)
break;
msl_info->image[n]=DestroyImage(msl_info->image[n]);