From 197e4122ea77f723607d69858272e8f23b80546d Mon Sep 17 00:00:00 2001 From: Cristy Date: Tue, 29 Dec 2015 10:18:58 -0500 Subject: [PATCH] Add file and verbose arguments to ConnectedComponentsImage() method --- MagickCore/vision.c | 22 ++++++++++++++-------- MagickCore/vision.h | 3 ++- MagickWand/mogrify.c | 5 +++-- MagickWand/operation.c | 4 ++-- PerlMagick/Magick.xs | 13 +++++++++++-- PerlMagick/quantum/quantum.xs.in | 13 +++++++++++-- 6 files changed, 43 insertions(+), 17 deletions(-) diff --git a/MagickCore/vision.c b/MagickCore/vision.c index d9be82f26..af80c5834 100644 --- a/MagickCore/vision.c +++ b/MagickCore/vision.c @@ -95,15 +95,21 @@ % % The format of the ConnectedComponentsImage method is: % -% Image *ConnectedComponentsImage(const Image *image, -% const size_t connectivity,ExceptionInfo *exception) +% Image *ConnectedComponentsImage(const Image *image,FILE *file, +% const size_t connectivity,const MagickBooleanType verbose, +% ExceptionInfo *exception) % % A description of each parameter follows: % % o image: the image. % +% o file: the file, typically stdout. +% % o connectivity: how many neighbors to visit, choose from 4 or 8. % +% o verbose: A value other than zero prints more detailed information +% about the image. +% % o exception: return any errors or warnings in this structure. % */ @@ -138,8 +144,9 @@ static int CCObjectCompare(const void *x,const void *y) return((int) (q->area-(ssize_t) p->area)); } -MagickExport Image *ConnectedComponentsImage(const Image *image, - const size_t connectivity,ExceptionInfo *exception) +MagickExport Image *ConnectedComponentsImage(const Image *image,FILE *file, + const size_t connectivity,const MagickBooleanType verbose, + ExceptionInfo *exception) { #define ConnectedComponentsImageTag "ConnectedComponents/Image" @@ -622,8 +629,7 @@ MagickExport Image *ConnectedComponentsImage(const Image *image, } } (void) SyncImage(component_image,exception); - artifact=GetImageArtifact(image,"connected-components:verbose"); - if (IsStringTrue(artifact) != MagickFalse) + if (verbose != MagickFalse) { /* Report statistics on unique objects. @@ -686,7 +692,7 @@ MagickExport Image *ConnectedComponentsImage(const Image *image, component_view=DestroyCacheView(component_view); qsort((void *) object,component_image->colors,sizeof(*object), CCObjectCompare); - (void) fprintf(stdout, + (void) fprintf(file, "Objects (id: bounding-box centroid area mean-color):\n"); for (i=0; i < (ssize_t) component_image->colors; i++) { @@ -698,7 +704,7 @@ MagickExport Image *ConnectedComponentsImage(const Image *image, if (object[i].area < MagickEpsilon) continue; GetColorTuple(&object[i].color,MagickFalse,mean_color); - (void) fprintf(stdout, + (void) fprintf(file, " %.20g: %.20gx%.20g%+.20g%+.20g %.1f,%.1f %.20g %s\n",(double) object[i].id,(double) object[i].bounding_box.width,(double) object[i].bounding_box.height,(double) object[i].bounding_box.x, diff --git a/MagickCore/vision.h b/MagickCore/vision.h index 8411df56c..dc22a3f10 100644 --- a/MagickCore/vision.h +++ b/MagickCore/vision.h @@ -23,7 +23,8 @@ extern "C" { #endif extern MagickExport Image - *ConnectedComponentsImage(const Image *,const size_t,ExceptionInfo *); + *ConnectedComponentsImage(const Image *,FILE *,const size_t, + const MagickBooleanType,ExceptionInfo *); #if defined(__cplusplus) || defined(c_plusplus) } diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index a248aa2d5..407879f84 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -1194,8 +1194,9 @@ WandExport MagickBooleanType MogrifyImage(ImageInfo *image_info,const int argc, if (LocaleCompare("connected-component",option+1) == 0) { (void) SyncImageSettings(mogrify_info,*image,exception); - mogrify_image=ConnectedComponentsImage(*image, - (size_t) StringToInteger(argv[i+1]),exception); + mogrify_image=ConnectedComponentsImage(*image,stdout, + (size_t) StringToInteger(argv[i+1]),mogrify_info->verbose, + exception); break; } if (LocaleCompare("contrast",option+1) == 0) diff --git a/MagickWand/operation.c b/MagickWand/operation.c index 838ab5fd2..e877c5fa2 100644 --- a/MagickWand/operation.c +++ b/MagickWand/operation.c @@ -2102,8 +2102,8 @@ static MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand, { if (IfMagickFalse(IsGeometry(arg1))) CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); - new_image=ConnectedComponentsImage(_image,(size_t) - StringToInteger(arg1),_exception); + new_image=ConnectedComponentsImage(_image,stdout,(size_t) + StringToInteger(arg1),_image_info->verbose,_exception); break; } if (LocaleCompare("contrast",option+1) == 0) diff --git a/PerlMagick/Magick.xs b/PerlMagick/Magick.xs index 90555b6c5..787ddd7ab 100644 --- a/PerlMagick/Magick.xs +++ b/PerlMagick/Magick.xs @@ -555,7 +555,8 @@ static struct {"distance", RealReference} } }, { "Kuwahara", { {"geometry", StringReference}, {"radius", RealReference}, {"sigma", RealReference}, {"channel", MagickChannelOptions} } }, - { "ConnectedComponents", { {"connectivity", IntegerReference} } }, + { "ConnectedComponents", { {"connectivity", IntegerReference}, + {"verbose", MagickBooleanOptions} } }, { "CopyPixels", { {"image", ImageReference}, {"geometry", StringReference}, {"width", IntegerReference}, {"height", IntegerReference}, {"x", IntegerReference}, {"y", IntegerReference}, @@ -11256,13 +11257,21 @@ Mogrify(ref,...) } case 142: /* ConnectedComponent */ { + MagickBooleanType + verbose; + size_t connectivity; connectivity=4; + verbose=MagickFalse; if (attribute_flag[0] != 0) connectivity=argument_list[0].integer_reference; - image=ConnectedComponentsImage(image,connectivity,exception); + if (attribute_flag[1] != 0) + verbose=argument_list[1].integer_reference != 0 ? + MagickTrue : MagickFalse; + image=ConnectedComponentsImage(image,stdout,connectivity,verbose, + exception); break; } case 143: /* Copy */ diff --git a/PerlMagick/quantum/quantum.xs.in b/PerlMagick/quantum/quantum.xs.in index 77d5c1d42..b621fab07 100644 --- a/PerlMagick/quantum/quantum.xs.in +++ b/PerlMagick/quantum/quantum.xs.in @@ -555,7 +555,8 @@ static struct {"double", RealReference} } }, { "Kuwahara", { {"geometry", StringReference}, {"radius", RealReference}, {"sigma", RealReference}, {"channel", MagickChannelOptions} } }, - { "ConnectedComponents", { {"connectivity", IntegerReference} } }, + { "ConnectedComponents", { {"connectivity", IntegerReference}, + {"verbose", MagickBooleanOptions} } }, { "CopyPixels", { {"image", ImageReference}, {"geometry", StringReference}, {"width", IntegerReference}, {"height", IntegerReference}, {"x", IntegerReference}, {"y", IntegerReference}, @@ -11254,13 +11255,21 @@ Mogrify(ref,...) } case 142: /* ConnectedComponent */ { + MagickBooleanType + verbose; + size_t connectivity; connectivity=4; + verbose=MagickFalse; if (attribute_flag[0] != 0) connectivity=argument_list[0].integer_reference; - image=ConnectedComponentsImage(image,connectivity,exception); + if (attribute_flag[1] != 0) + verbose=argument_list[1].integer_reference != 0 ? + MagickTrue : MagickFalse; + image=ConnectedComponentsImage(image,stdout,connectivity,verbose, + exception); break; } case 143: /* Copy */ -- 2.40.0