mirror of
https://github.com/ImageMagick/ImageMagick.git
synced 2026-05-31 11:18:42 +02:00
This commit is contained in:
@@ -890,12 +890,12 @@ void Magick::Image::draw ( const std::list<Magick::Drawable> &drawable_ )
|
||||
}
|
||||
|
||||
// Hilight edges in image
|
||||
void Magick::Image::edge ( const double radius_, const double sigma_ )
|
||||
void Magick::Image::edge ( const double radius_ )
|
||||
{
|
||||
ExceptionInfo exceptionInfo;
|
||||
GetExceptionInfo( &exceptionInfo );
|
||||
MagickCore::Image* newImage =
|
||||
EdgeImage( image(), radius_, sigma_, &exceptionInfo );
|
||||
EdgeImage( image(), radius_, &exceptionInfo );
|
||||
replaceImage( newImage );
|
||||
throwException( exceptionInfo );
|
||||
(void) DestroyExceptionInfo( &exceptionInfo );
|
||||
|
||||
@@ -283,8 +283,7 @@ namespace Magick
|
||||
void draw ( const std::list<Magick::Drawable> &drawable_ );
|
||||
|
||||
// Edge image (hilight edges in image)
|
||||
void edge ( const double radius_ = 0.0,
|
||||
const double sigma_ = 1.0);
|
||||
void edge ( const double radius_ = 0.0 )
|
||||
|
||||
// Emboss image (hilight edges with 3D effect)
|
||||
// The radius_ parameter specifies the radius of the Gaussian, in
|
||||
|
||||
@@ -8340,8 +8340,7 @@ static Image *XMagickCommand(Display *display,XResourceInfo *resource_info,
|
||||
XSetCursorState(display,windows,MagickTrue);
|
||||
XCheckRefreshWindows(display,windows);
|
||||
flags=ParseGeometry(radius,&geometry_info);
|
||||
edge_image=EdgeImage(*image,geometry_info.rho,geometry_info.sigma,
|
||||
exception);
|
||||
edge_image=EdgeImage(*image,geometry_info.rho,exception);
|
||||
if (edge_image != (Image *) NULL)
|
||||
{
|
||||
*image=DestroyImage(*image);
|
||||
@@ -8376,8 +8375,7 @@ static Image *XMagickCommand(Display *display,XResourceInfo *resource_info,
|
||||
XSetCursorState(display,windows,MagickTrue);
|
||||
XCheckRefreshWindows(display,windows);
|
||||
flags=ParseGeometry(amount,&geometry_info);
|
||||
spread_image=EdgeImage(*image,geometry_info.rho,geometry_info.sigma,
|
||||
exception);
|
||||
spread_image=EdgeImage(*image,geometry_info.rho,exception);
|
||||
if (spread_image != (Image *) NULL)
|
||||
{
|
||||
*image=DestroyImage(*image);
|
||||
|
||||
+15
-48
@@ -229,7 +229,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius,
|
||||
/*
|
||||
Edge detect the image brighness channel, level, blur, and level again.
|
||||
*/
|
||||
edge_image=EdgeImage(image,radius,sigma,exception);
|
||||
edge_image=EdgeImage(image,radius,exception);
|
||||
if (edge_image == (Image *) NULL)
|
||||
{
|
||||
blur_image=DestroyImage(blur_image);
|
||||
@@ -554,7 +554,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius,
|
||||
/*
|
||||
Edge detect the image brighness channel, level, sharp, and level again.
|
||||
*/
|
||||
edge_image=EdgeImage(image,radius,sigma,exception);
|
||||
edge_image=EdgeImage(image,radius,exception);
|
||||
if (edge_image == (Image *) NULL)
|
||||
{
|
||||
sharp_image=DestroyImage(sharp_image);
|
||||
@@ -1189,7 +1189,7 @@ MagickExport Image *DespeckleImage(const Image *image,ExceptionInfo *exception)
|
||||
% The format of the EdgeImage method is:
|
||||
%
|
||||
% Image *EdgeImage(const Image *image,const double radius,
|
||||
% const double sigma,ExceptionInfo *exception)
|
||||
% ExceptionInfo *exception)
|
||||
%
|
||||
% A description of each parameter follows:
|
||||
%
|
||||
@@ -1197,30 +1197,20 @@ MagickExport Image *DespeckleImage(const Image *image,ExceptionInfo *exception)
|
||||
%
|
||||
% o radius: the radius of the pixel neighborhood.
|
||||
%
|
||||
% o sigma: the standard deviation of the Gaussian, in pixels.
|
||||
%
|
||||
% o exception: return any errors or warnings in this structure.
|
||||
%
|
||||
*/
|
||||
MagickExport Image *EdgeImage(const Image *image,const double radius,
|
||||
const double sigma,ExceptionInfo *exception)
|
||||
ExceptionInfo *exception)
|
||||
{
|
||||
Image
|
||||
*edge_image;
|
||||
char
|
||||
geometry[MaxTextExtent];
|
||||
|
||||
KernelInfo
|
||||
*kernel_info;
|
||||
|
||||
register ssize_t
|
||||
i;
|
||||
|
||||
size_t
|
||||
width;
|
||||
|
||||
ssize_t
|
||||
j,
|
||||
u,
|
||||
v;
|
||||
Image
|
||||
*edge_image;
|
||||
|
||||
assert(image != (const Image *) NULL);
|
||||
assert(image->signature == MagickSignature);
|
||||
@@ -1228,34 +1218,11 @@ MagickExport Image *EdgeImage(const Image *image,const double radius,
|
||||
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
|
||||
assert(exception != (ExceptionInfo *) NULL);
|
||||
assert(exception->signature == MagickSignature);
|
||||
width=GetOptimalKernelWidth1D(radius,sigma);
|
||||
kernel_info=AcquireKernelInfo((const char *) NULL);
|
||||
(void) FormatLocaleString(geometry,MaxTextExtent,"laplacian:%.20g",radius);
|
||||
kernel_info=AcquireKernelInfo(geometry);
|
||||
if (kernel_info == (KernelInfo *) NULL)
|
||||
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
|
||||
kernel_info->width=width;
|
||||
kernel_info->height=width;
|
||||
kernel_info->x=(ssize_t) (width-1)/2;
|
||||
kernel_info->y=(ssize_t) (width-1)/2;
|
||||
kernel_info->values=(MagickRealType *) MagickAssumeAligned(
|
||||
AcquireAlignedMemory(kernel_info->width,kernel_info->width*
|
||||
sizeof(*kernel_info->values)));
|
||||
if (kernel_info->values == (MagickRealType *) NULL)
|
||||
{
|
||||
kernel_info=DestroyKernelInfo(kernel_info);
|
||||
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
|
||||
}
|
||||
j=(ssize_t) (kernel_info->width-1)/2;
|
||||
i=0;
|
||||
for (v=(-j); v <= j; v++)
|
||||
{
|
||||
for (u=(-j); u <= j; u++)
|
||||
{
|
||||
kernel_info->values[i]=(MagickRealType) (-1.0);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
kernel_info->values[(i-1)/2]=(MagickRealType) (width*width-1.0);
|
||||
edge_image=ConvolveImage(image,kernel_info,exception);
|
||||
edge_image=MorphologyImage(image,ConvolveMorphology,1,kernel_info,exception);
|
||||
kernel_info=DestroyKernelInfo(kernel_info);
|
||||
return(edge_image);
|
||||
}
|
||||
@@ -2031,7 +1998,7 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
|
||||
}
|
||||
case EdgeDetectPreview:
|
||||
{
|
||||
preview_image=EdgeImage(thumbnail,radius,sigma,exception);
|
||||
preview_image=EdgeImage(thumbnail,radius,exception);
|
||||
(void) FormatLocaleString(label,MaxTextExtent,"edge %g",radius);
|
||||
break;
|
||||
}
|
||||
@@ -3112,7 +3079,7 @@ MagickExport Image *SharpenImage(const Image *image,const double radius,
|
||||
*kernel_info;
|
||||
|
||||
Image
|
||||
*sharpen_image;
|
||||
*sharp_image;
|
||||
|
||||
assert(image != (const Image *) NULL);
|
||||
assert(image->signature == MagickSignature);
|
||||
@@ -3126,10 +3093,10 @@ MagickExport Image *SharpenImage(const Image *image,const double radius,
|
||||
if (kernel_info == (KernelInfo *) NULL)
|
||||
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
|
||||
ScaleGeometryKernelInfo(kernel_info,"56!,100%");
|
||||
sharpen_image=MorphologyImage(image,ConvolveMorphology,1,kernel_info,
|
||||
sharp_image=MorphologyImage(image,ConvolveMorphology,1,kernel_info,
|
||||
exception);
|
||||
kernel_info=DestroyKernelInfo(kernel_info);
|
||||
return(sharpen_image);
|
||||
return(sharp_image);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ extern MagickExport Image
|
||||
*BlurImage(const Image *,const double,const double,ExceptionInfo *),
|
||||
*ConvolveImage(const Image *,const KernelInfo *,ExceptionInfo *),
|
||||
*DespeckleImage(const Image *,ExceptionInfo *),
|
||||
*EdgeImage(const Image *,const double,const double,ExceptionInfo *),
|
||||
*EdgeImage(const Image *,const double,ExceptionInfo *),
|
||||
*EmbossImage(const Image *,const double,const double,ExceptionInfo *),
|
||||
*GaussianBlurImage(const Image *,const double,const double,ExceptionInfo *),
|
||||
*MotionBlurImage(const Image *,const double,const double,const double,
|
||||
|
||||
+2
-2
@@ -603,7 +603,7 @@ MagickExport Image *CharcoalImage(const Image *image,const double radius,
|
||||
if (clone_image == (Image *) NULL)
|
||||
return((Image *) NULL);
|
||||
(void) SetImageType(clone_image,GrayscaleType,exception);
|
||||
edge_image=EdgeImage(clone_image,radius,sigma,exception);
|
||||
edge_image=EdgeImage(clone_image,radius,exception);
|
||||
clone_image=DestroyImage(clone_image);
|
||||
if (edge_image == (Image *) NULL)
|
||||
return((Image *) NULL);
|
||||
@@ -4480,7 +4480,7 @@ MagickExport Image *SketchImage(const Image *image,const double radius,
|
||||
random_image=DestroyImage(random_image);
|
||||
if (blur_image == (Image *) NULL)
|
||||
return((Image *) NULL);
|
||||
dodge_image=EdgeImage(blur_image,radius,1.0,exception);
|
||||
dodge_image=EdgeImage(blur_image,radius,exception);
|
||||
blur_image=DestroyImage(blur_image);
|
||||
if (dodge_image == (Image *) NULL)
|
||||
return((Image *) NULL);
|
||||
|
||||
@@ -2666,8 +2666,7 @@ WandExport MagickBooleanType MagickDrawImage(MagickWand *wand,
|
||||
%
|
||||
% The format of the MagickEdgeImage method is:
|
||||
%
|
||||
% MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius,
|
||||
% const double sigma)
|
||||
% MagickBooleanType MagickEdgeImage(MagickWand *wand,const double radius)
|
||||
%
|
||||
% A description of each parameter follows:
|
||||
%
|
||||
@@ -2675,11 +2674,9 @@ WandExport MagickBooleanType MagickDrawImage(MagickWand *wand,
|
||||
%
|
||||
% o radius: the radius of the pixel neighborhood.
|
||||
%
|
||||
% o sigma: the standard deviation of the Gaussian, in pixels.
|
||||
%
|
||||
*/
|
||||
WandExport MagickBooleanType MagickEdgeImage(MagickWand *wand,
|
||||
const double radius,const double sigma)
|
||||
const double radius)
|
||||
{
|
||||
Image
|
||||
*edge_image;
|
||||
@@ -2690,7 +2687,7 @@ WandExport MagickBooleanType MagickEdgeImage(MagickWand *wand,
|
||||
(void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name);
|
||||
if (wand->images == (Image *) NULL)
|
||||
ThrowWandException(WandError,"ContainsNoImages",wand->name);
|
||||
edge_image=EdgeImage(wand->images,radius,sigma,wand->exception);
|
||||
edge_image=EdgeImage(wand->images,radius,wand->exception);
|
||||
if (edge_image == (Image *) NULL)
|
||||
return(MagickFalse);
|
||||
ReplaceImageInList(&wand->images,edge_image);
|
||||
|
||||
@@ -124,7 +124,7 @@ extern WandExport MagickBooleanType
|
||||
MagickDistortImage(MagickWand *,const DistortImageMethod,const size_t,
|
||||
const double *,const MagickBooleanType),
|
||||
MagickDrawImage(MagickWand *,const DrawingWand *),
|
||||
MagickEdgeImage(MagickWand *,const double,const double),
|
||||
MagickEdgeImage(MagickWand *,const double),
|
||||
MagickEmbossImage(MagickWand *,const double,const double),
|
||||
MagickEncipherImage(MagickWand *,const char *),
|
||||
MagickEnhanceImage(MagickWand *),
|
||||
|
||||
@@ -1421,10 +1421,7 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc,
|
||||
*/
|
||||
(void) SyncImageSettings(mogrify_info,*image,exception);
|
||||
flags=ParseGeometry(argv[i+1],&geometry_info);
|
||||
if ((flags & SigmaValue) == 0)
|
||||
geometry_info.sigma=1.0;
|
||||
mogrify_image=EdgeImage(*image,geometry_info.rho,
|
||||
geometry_info.sigma,exception);
|
||||
mogrify_image=EdgeImage(*image,geometry_info.rho,exception);
|
||||
break;
|
||||
}
|
||||
if (LocaleCompare("emboss",option+1) == 0)
|
||||
|
||||
@@ -2221,10 +2221,7 @@ static MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand,
|
||||
flags=ParseGeometry(arg1,&geometry_info);
|
||||
if ((flags & (RhoValue|SigmaValue)) == 0)
|
||||
CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1);
|
||||
if ((flags & SigmaValue) == 0)
|
||||
geometry_info.sigma=1.0;
|
||||
new_image=EdgeImage(_image,geometry_info.rho,geometry_info.sigma,
|
||||
_exception);
|
||||
new_image=EdgeImage(_image,geometry_info.rho,_exception);
|
||||
break;
|
||||
}
|
||||
if (LocaleCompare("emboss",option+1) == 0)
|
||||
|
||||
@@ -7788,8 +7788,7 @@ Mogrify(ref,...)
|
||||
{
|
||||
if (attribute_flag[0] != 0)
|
||||
geometry_info.rho=argument_list[0].real_reference;
|
||||
image=EdgeImage(image,geometry_info.rho,geometry_info.sigma,
|
||||
exception);
|
||||
image=EdgeImage(image,geometry_info.rho,exception);
|
||||
break;
|
||||
}
|
||||
case 11: /* Emboss */
|
||||
|
||||
+1
-1
@@ -2767,7 +2767,7 @@ static void MSLStartElement(void *context,const xmlChar *tag,
|
||||
}
|
||||
}
|
||||
edge_image=EdgeImage(msl_info->image[n],geometry_info.rho,
|
||||
geometry_info.sigma,msl_info->exception);
|
||||
msl_info->exception);
|
||||
if (edge_image == (Image *) NULL)
|
||||
break;
|
||||
msl_info->image[n]=DestroyImage(msl_info->image[n]);
|
||||
|
||||
Reference in New Issue
Block a user