Optional newlines to "sparse-color:"

Questions and postings pertaining to the development of ImageMagick, feature enhancements, and ImageMagick internals. ImageMagick source code and algorithms are discussed here. Usage questions which are too arcane for the normal user list should also be posted here.
Post Reply
snibgo
Posts: 12159
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Optional newlines to "sparse-color:"

Post by snibgo »

The "-sparse-color" operator can read an at-file where pixels are on separate lines. However, the output format "sparse-color:" currently writes the pixels on a single line, each followed by a space. Processing these can be painful.

I propose a "-define" option is added which, if set, will issue a newline "\n" instead of a space after each pixel. For example:

Code: Select all

convert -size 1x5 gradient: sparse-color:

0,0,white 0,1,srgb(75%,75%,75%) 0,2,srgb(50%,50%,50%) 0,3,srgb(25%,25%,25%) 0,4,black

convert -size 1x5 gradient: -define sparse-color:newline=true sparse-color:

0,0,white
0,1,srgb(75%,75%,75%)
0,2,srgb(50%,50%,50%)
0,3,srgb(25%,25%,25%)
0,4,black
The diff file below to coders\txt.c, from v6.9.0-0, implements this change.

If implemented, this would also need an addition to documentation http://www.imagemagick.org/script/comma ... php#define :
sparse-color:newline[=true]

By default, the output format "sparse-color:" issues a space after each pixel. When this option is defined, a newline is issued instead.

Code: Select all

--- /home/Alan/ImageMagick-6.9.0-0/factory/txt.c	2014-07-03 13:53:23.000000000 +0100
+++ /home/Alan/ImageMagick-6.9.0-0//coders/txt.c	2015-01-22 23:31:03.282992500 +0000
@@ -41,6 +41,7 @@
 */
 #include "magick/studio.h"
 #include "magick/annotate.h"
+#include "magick/artifact.h"
 #include "magick/attribute.h"
 #include "magick/blob.h"
 #include "magick/blob-private.h"
@@ -723,6 +724,9 @@
     ComplianceType
       compliance;
 
+    MagickBooleanType
+      NeedNewLine;
+
     (void) CopyMagickString(colorspace,CommandOptionToMnemonic(
       MagickColorspaceOptions,(ssize_t) image->colorspace),MaxTextExtent);
     LocaleLower(colorspace);
@@ -730,8 +734,16 @@
     if (image->matte != MagickFalse)
       (void) ConcatenateMagickString(colorspace,"a",MaxTextExtent);
     compliance=NoCompliance;
-    if (LocaleCompare(image_info->magick,"SPARSE-COLOR") != 0)
+    NeedNewLine=MagickFalse;
+    if (LocaleCompare(image_info->magick,"SPARSE-COLOR") == 0)
       {
+        const char
+          *value;
+        value=GetImageOption(image_info,"sparse-color:newline");
+        if (value == NULL)
+          value=GetImageArtifact(image,"sparse-color:newline");
+        NeedNewLine = (value != NULL);
+      } else {
         (void) FormatLocaleString(buffer,MaxTextExtent,
           "# ImageMagick pixel enumeration: %.20g,%.20g,%.20g,%s\n",(double)
           image->columns,(double) image->rows,(double) ((MagickOffsetType)
@@ -768,7 +780,7 @@
                   (double) x,(double) y);
                 (void) WriteBlobString(image,buffer);
                 (void) WriteBlobString(image,tuple);
-                (void) WriteBlobString(image," ");
+                (void) WriteBlobString(image, NeedNewLine ? "\n" : " ");
               }
             p++;
             continue;
snibgo's IM pages: im.snibgo.com
Post Reply