From 9dc4c51125c7242f63ea032e209ea65fe855f82f Mon Sep 17 00:00:00 2001 From: cristy Date: Sun, 24 Mar 2013 01:38:00 +0000 Subject: [PATCH] --- Magick++/lib/Image.cpp | 4 +- Magick++/lib/Magick++/Image.h | 3 +- MagickCore/display.c | 6 +-- MagickCore/effect.c | 63 ++++++++------------------------ MagickCore/effect.h | 2 +- MagickCore/fx.c | 4 +- MagickWand/magick-image.c | 9 ++--- MagickWand/magick-image.h | 2 +- MagickWand/mogrify.c | 5 +-- MagickWand/operation.c | 5 +-- PerlMagick/quantum/quantum.xs.in | 3 +- coders/msl.c | 2 +- 12 files changed, 31 insertions(+), 77 deletions(-) diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp index a3875fe4a..db173d7e0 100644 --- a/Magick++/lib/Image.cpp +++ b/Magick++/lib/Image.cpp @@ -890,12 +890,12 @@ void Magick::Image::draw ( const std::list &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 ); diff --git a/Magick++/lib/Magick++/Image.h b/Magick++/lib/Magick++/Image.h index 316a13620..a9924678c 100644 --- a/Magick++/lib/Magick++/Image.h +++ b/Magick++/lib/Magick++/Image.h @@ -283,8 +283,7 @@ namespace Magick void draw ( const std::list &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 diff --git a/MagickCore/display.c b/MagickCore/display.c index a1a0ec6ac..b01bb6cce 100644 --- a/MagickCore/display.c +++ b/MagickCore/display.c @@ -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); diff --git a/MagickCore/effect.c b/MagickCore/effect.c index 4cfa217d8..1c2039600 100644 --- a/MagickCore/effect.c +++ b/MagickCore/effect.c @@ -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); } /* diff --git a/MagickCore/effect.h b/MagickCore/effect.h index 0a42df507..9245cf2e7 100644 --- a/MagickCore/effect.h +++ b/MagickCore/effect.h @@ -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, diff --git a/MagickCore/fx.c b/MagickCore/fx.c index 473a3daa9..501679fba 100644 --- a/MagickCore/fx.c +++ b/MagickCore/fx.c @@ -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); diff --git a/MagickWand/magick-image.c b/MagickWand/magick-image.c index 8cdc5c91c..18343f028 100644 --- a/MagickWand/magick-image.c +++ b/MagickWand/magick-image.c @@ -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); diff --git a/MagickWand/magick-image.h b/MagickWand/magick-image.h index 2677cdc1d..bdc3d4eae 100644 --- a/MagickWand/magick-image.h +++ b/MagickWand/magick-image.h @@ -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 *), diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index e104d0e10..6d3894cbf 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -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) diff --git a/MagickWand/operation.c b/MagickWand/operation.c index d5553bcd0..87698e192 100644 --- a/MagickWand/operation.c +++ b/MagickWand/operation.c @@ -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) diff --git a/PerlMagick/quantum/quantum.xs.in b/PerlMagick/quantum/quantum.xs.in index 8a323cab7..b04771d11 100644 --- a/PerlMagick/quantum/quantum.xs.in +++ b/PerlMagick/quantum/quantum.xs.in @@ -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 */ diff --git a/coders/msl.c b/coders/msl.c index 403ee2c6b..279f37a9a 100644 --- a/coders/msl.c +++ b/coders/msl.c @@ -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]); -- 2.50.1