]> granicus.if.org Git - imagemagick/commitdiff
Add file and verbose arguments to ConnectedComponentsImage() method
authorCristy <urban-warrior@imagemagick.org>
Tue, 29 Dec 2015 15:18:58 +0000 (10:18 -0500)
committerCristy <urban-warrior@imagemagick.org>
Tue, 29 Dec 2015 15:18:58 +0000 (10:18 -0500)
MagickCore/vision.c
MagickCore/vision.h
MagickWand/mogrify.c
MagickWand/operation.c
PerlMagick/Magick.xs
PerlMagick/quantum/quantum.xs.in

index d9be82f26400b3a310c74d114ce572460ddbc517..af80c583492583a2e5bbbbc389d53755873406ea 100644 (file)
 %
 %  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,
index 8411df56c2292ea00576681cc408d7c1df4e83aa..dc22a3f10d91af77de08c1e0f9cbf85798905fdd 100644 (file)
@@ -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)
 }
index a248aa2d52f5c88e0ba69db4317d8f50af8ba87d..407879f84311b06f815ce08d043b8055d4f12eca 100644 (file)
@@ -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)
index 838ab5fd21585c8a99157245762a1f0550211eb8..e877c5fa23473e7e48f7440d439da6e306c9b354 100644 (file)
@@ -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)
index 90555b6c512f0d1f547b9dee9146f724b00f61ca..787ddd7ab9a8389b1bcda057dfee12464ef7327f 100644 (file)
@@ -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 */
index 77d5c1d42e542eb8b1551c08f5eebd0e948001a4..b621fab077fb03579966f80578bea4b296dcc48e 100644 (file)
@@ -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 */