]> granicus.if.org Git - imagemagick/blobdiff - magick/property.c
(no commit message)
[imagemagick] / magick / property.c
index 76a2370c7597c2704bef06032c9f4d60180e8c14..49dc1cdd7360b19a41ade621ca3fc605f8a56a00 100644 (file)
@@ -304,7 +304,7 @@ MagickExport void DestroyImageProperties(Image *image)
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 %  FormatImageProperty() permits formatted property/value pairs to be saved as
-%  an image proporty.
+%  an image property.
 %
 %  The format of the FormatImageProperty method is:
 %
@@ -562,7 +562,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key)
     length;
 
   /*
-    There's no newlines in path names, so it's safe as terminator.
+    There are no newlines in path names, so it's safe as terminator.
   */
   profile=GetImageProfile(image,"8bim");
   if (profile == (StringInfo *) NULL)
@@ -1091,30 +1091,29 @@ static MagickBooleanType GetEXIFProperty(const Image *image,
   EndianType
     endian;
 
-  ssize_t
-    all,
-    id,
-    level,
-    tag_value;
+  MagickBooleanType
+    status;
 
   register ssize_t
     i;
 
   size_t
-    length;
+    entry,
+    length,
+    number_entries,
+    tag_offset,
+    tag;
 
   ssize_t
-    offset;
+    all,
+    id,
+    level,
+    offset,
+    tag_value;
 
   static int
     tag_bytes[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8};
 
-  size_t
-    entry,
-    number_entries,
-    tag_offset,
-    tag;
-
   /*
     If EXIF data exists, then try to parse the request for a tag.
   */
@@ -1245,6 +1244,7 @@ static MagickBooleanType GetEXIFProperty(const Image *image,
   /*
     Set the pointer to the first IFD and follow it were it leads.
   */
+  status=MagickFalse;
   directory=exif+offset;
   level=0;
   entry=0;
@@ -1267,18 +1267,16 @@ static MagickBooleanType GetEXIFProperty(const Image *image,
     number_entries=ReadPropertyShort(endian,directory);
     for ( ; entry < number_entries; entry++)
     {
-      ssize_t
-        components;
-
       register unsigned char
         *p,
         *q;
 
       size_t
+        format,
         number_bytes;
 
-      size_t
-        format;
+      ssize_t
+        components;
 
       q=(unsigned char *) (directory+2+(12*entry));
       tag_value=(ssize_t) (ReadPropertyShort(endian,q)+tag_offset);
@@ -1446,6 +1444,7 @@ static MagickBooleanType GetEXIFProperty(const Image *image,
               if (p == (const char *) NULL)
                 (void) SetImageProperty((Image *) image,key,value);
               value=DestroyString(value);
+              status=MagickTrue;
             }
         }
         if ((tag_value == TAG_EXIF_OFFSET) ||
@@ -1488,7 +1487,7 @@ static MagickBooleanType GetEXIFProperty(const Image *image,
           }
     }
   } while (level > 0);
-  return(MagickTrue);
+  return(status);
 }
 
 static MagickBooleanType GetXMPProperty(const Image *image,
@@ -1576,11 +1575,6 @@ static char *TracePSClippath(const unsigned char *blob,size_t length,
     *path,
     *message;
 
-  ssize_t
-    knot_count,
-    selector,
-    y;
-
   MagickBooleanType
     in_subpath;
 
@@ -1593,6 +1587,11 @@ static char *TracePSClippath(const unsigned char *blob,size_t length,
     i,
     x;
 
+  ssize_t
+    knot_count,
+    selector,
+    y;
+
   path=AcquireString((char *) NULL);
   if (path == (char *) NULL)
     return((char *) NULL);
@@ -1784,12 +1783,6 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length,
     *path,
     *message;
 
-  ssize_t
-    knot_count,
-    selector,
-    x,
-    y;
-
   MagickBooleanType
     in_subpath;
 
@@ -1801,6 +1794,12 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length,
   register ssize_t
     i;
 
+  ssize_t
+    knot_count,
+    selector,
+    x,
+    y;
+
   path=AcquireString((char *) NULL);
   if (path == (char *) NULL)
     return((char *) NULL);
@@ -1865,7 +1864,7 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length,
         */
         for (i=0; i < 3; i++)
         {
-          size_t 
+          size_t
             xx,
             yy;
 
@@ -1973,21 +1972,25 @@ MagickExport const char *GetImageProperty(const Image *image,
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   p=(const char *) NULL;
-  if (property == (const char *) NULL)
-    {
-      ResetSplayTreeIterator((SplayTreeInfo *) image->properties);
-      p=(const char *) GetNextValueInSplayTree((SplayTreeInfo *)
-        image->properties);
-      return(p);
-    }
   if (image->properties != (void *) NULL)
     {
-      p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
-        image->properties,property);
-      if (p != (const char *) NULL)
-        return(p);
+      if (property == (const char *) NULL)
+        {
+          ResetSplayTreeIterator((SplayTreeInfo *) image->properties);
+          p=(const char *) GetNextValueInSplayTree((SplayTreeInfo *)
+            image->properties);
+          return(p);
+        }
+      if (LocaleNCompare("fx:",property,3) != 0)
+        {
+          p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
+            image->properties,property);
+          if (p != (const char *) NULL)
+            return(p);
+        }
     }
-  if (strchr(property,':') == (char *) NULL)
+  if ((property == (const char *) NULL) ||
+      (strchr(property,':') == (char *) NULL))
     return(p);
   exception=(&((Image *) image)->exception);
   switch (*property)
@@ -1996,7 +1999,8 @@ MagickExport const char *GetImageProperty(const Image *image,
     {
       if (LocaleNCompare("8bim:",property,5) == 0)
         {
-          if (Get8BIMProperty(image,property) != MagickFalse)
+          if ((Get8BIMProperty(image,property) != MagickFalse) &&
+              (image->properties != (void *) NULL))
             {
               p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
                 image->properties,property);
@@ -2010,7 +2014,8 @@ MagickExport const char *GetImageProperty(const Image *image,
     {
       if (LocaleNCompare("exif:",property,5) == 0)
         {
-          if (GetEXIFProperty(image,property) != MagickFalse)
+          if ((GetEXIFProperty(image,property) != MagickFalse) &&
+              (image->properties != (void *) NULL))
             {
               p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
                 image->properties,property);
@@ -2037,9 +2042,12 @@ MagickExport const char *GetImageProperty(const Image *image,
                 GetMagickPrecision(),(double) alpha);
               (void) SetImageProperty((Image *) image,property,value);
             }
-          p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
-            image->properties,property);
-          return(p);
+          if (image->properties != (void *) NULL)
+            {
+              p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
+                image->properties,property);
+              return(p);
+            }
         }
       break;
     }
@@ -2048,7 +2056,8 @@ MagickExport const char *GetImageProperty(const Image *image,
     {
       if (LocaleNCompare("iptc:",property,5) == 0)
         {
-          if (GetIPTCProperty(image,property) != MagickFalse)
+          if ((GetIPTCProperty(image,property) != MagickFalse) &&
+              (image->properties != (void *) NULL))
             {
               p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
                 image->properties,property);
@@ -2104,7 +2113,8 @@ MagickExport const char *GetImageProperty(const Image *image,
     {
       if (LocaleNCompare("xmp:",property,4) == 0)
         {
-          if (GetXMPProperty(image,property) != MagickFalse)
+          if ((GetXMPProperty(image,property) != MagickFalse) &&
+              (image->properties != (void *) NULL))
             {
               p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
                 image->properties,property);
@@ -2113,6 +2123,8 @@ MagickExport const char *GetImageProperty(const Image *image,
         }
       break;
     }
+    default:
+      break;
   }
   return(p);
 }
@@ -2172,7 +2184,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
             Image channels.
           */
           (void) FormatMagickString(value,MaxTextExtent,"%s",
-            MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+            CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
             image->colorspace));
           LocaleLower(value);
           if (image->matte != MagickFalse)
@@ -2191,7 +2203,7 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
           if (IsGrayImage(image,&image->exception) != MagickFalse)
             colorspace=GRAYColorspace;
           (void) FormatMagickString(value,MaxTextExtent,"%s",
-            MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
+            CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t)
             colorspace));
           break;
         }
@@ -2329,6 +2341,16 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
     }
     case 'o':
     {
+      if (LocaleNCompare("opaque",property,6) == 0)
+        {
+          MagickBooleanType
+            opaque;
+
+          opaque=IsOpaqueImage(image,&image->exception);
+          (void) CopyMagickString(value,opaque == MagickFalse ? "false" :
+            "true",MaxTextExtent);
+          break;
+        }
       if (LocaleNCompare("output",property,6) == 0)
         {
           (void) CopyMagickString(value,image_info->filename,MaxTextExtent);
@@ -2340,17 +2362,8 @@ MagickExport const char *GetMagickProperty(const ImageInfo *image_info,
     {
       if (LocaleNCompare("page",property,4) == 0)
         {
-          register const Image
-            *p;
-
-          size_t
-            page;
-
-          p=image;
-          for (page=1; GetPreviousImageInList(p) != (Image *) NULL; page++)
-            p=GetPreviousImageInList(p);
           (void) FormatMagickString(value,MaxTextExtent,"%.20g",(double)
-            page);
+              GetImageIndexInList(image)+1);
           break;
         }
       break;
@@ -2554,9 +2567,6 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
   const char
     *value;
 
-  ImageInfo
-    *text_info;
-
   register char
     *q;
 
@@ -2583,7 +2593,6 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
   /*
     Translate any embedded format characters.
   */
-  text_info=CloneImageInfo(image_info);
   interpret_text=AcquireString(text);
   extent=MaxTextExtent;
   p=text;
@@ -2656,8 +2665,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         if ((size_t) (q-interpret_text+length+1) >= extent)
           {
             extent+=length;
-            interpret_text=(char *) ResizeQuantumMemory(interpret_text,
-              extent+MaxTextExtent,sizeof(*interpret_text));
+            interpret_text=(char *) ResizeQuantumMemory(interpret_text,extent+
+              MaxTextExtent,sizeof(*interpret_text));
             if (interpret_text == (char *) NULL)
               break;
             q=interpret_text+strlen(interpret_text);
@@ -2723,8 +2732,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
           Image geometry.
         */
         q+=FormatMagickString(q,extent,"%.20gx%.20g%+.20g%+.20g",(double)
-          image->page.width,(double) image->page.height,(double)
-          image->page.x,(double) image->page.y);
+          image->page.width,(double) image->page.height,(double) image->page.x,
+          (double) image->page.y);
         break;
       }
       case 'h':
@@ -2732,8 +2741,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image height.
         */
-        q+=FormatMagickString(q,extent,"%.20g",(double)
-          (image->rows != 0 ? image->rows : image->magick_rows));
+        q+=FormatMagickString(q,extent,"%.20g",(double) (image->rows != 0 ?
+          image->rows : image->magick_rows));
         break;
       }
       case 'i':
@@ -2749,8 +2758,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Number of unique colors.
         */
-        q+=FormatMagickString(q,extent,"%.20g",(double)
-          GetNumberColors(image,(FILE *) NULL,&image->exception));
+        q+=FormatMagickString(q,extent,"%.20g",(double) GetNumberColors(image,
+          (FILE *) NULL,&image->exception));
         break;
       }
       case 'l':
@@ -2765,8 +2774,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         if ((size_t) (q-interpret_text+length+1) >= extent)
           {
             extent+=length;
-            interpret_text=(char *) ResizeQuantumMemory(interpret_text,
-              extent+MaxTextExtent,sizeof(*interpret_text));
+            interpret_text=(char *) ResizeQuantumMemory(interpret_text,extent+
+              MaxTextExtent,sizeof(*interpret_text));
             if (interpret_text == (char *) NULL)
               break;
             q=interpret_text+strlen(interpret_text);
@@ -2796,7 +2805,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
           Number of images in the list.
         */
         q+=FormatMagickString(q,extent,"%.20g",(double)
-          GetImageListLength(image));
+             GetImageListLength(image));
         break;
       }
       case 'o':
@@ -2804,24 +2813,16 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image output filename.
         */
-        q+=CopyMagickString(q,text_info->filename,extent);
+        q+=CopyMagickString(q,image_info->filename,extent);
         break;
       }
       case 'p':
       {
-        register const Image
-          *p;
-
-        size_t
-          page;
-
         /*
-          Image page number.
+          Image index in list.
         */
-        p=image;
-        for (page=1; GetPreviousImageInList(p) != (Image *) NULL; page++)
-          p=GetPreviousImageInList(p);
-        q+=FormatMagickString(q,extent,"%.20g",(double) page);
+        q+=FormatMagickString(q,extent,"%.20g",(double)
+            GetImageIndexInList(image));
         break;
       }
       case 'q':
@@ -2844,9 +2845,9 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         colorspace=image->colorspace;
         if (IsGrayImage(image,&image->exception) != MagickFalse)
           colorspace=GRAYColorspace;
-        q+=FormatMagickString(q,extent,"%s%s%s",MagickOptionToMnemonic(
+        q+=FormatMagickString(q,extent,"%s%s%s",CommandOptionToMnemonic(
           MagickClassOptions,(ssize_t) image->storage_class),
-          MagickOptionToMnemonic(MagickColorspaceOptions,(ssize_t) colorspace),
+          CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) colorspace),
           image->matte != MagickFalse ? "Matte" : "");
         break;
       }
@@ -2855,10 +2856,10 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image scene number.
         */
-        if (text_info->number_scenes == 0)
+        if (image_info->number_scenes == 0)
           q+=FormatMagickString(q,extent,"%.20g",(double) image->scene);
         else
-          q+=FormatMagickString(q,extent,"%.20g",(double) text_info->scene);
+          q+=FormatMagickString(q,extent,"%.20g",(double) image_info->scene);
         break;
       }
       case 'u':
@@ -2866,7 +2867,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Unique filename.
         */
-        (void) CopyMagickString(filename,text_info->unique,extent);
+        (void) CopyMagickString(filename,image_info->unique,extent);
         q+=CopyMagickString(q,filename,extent);
         break;
       }
@@ -2875,8 +2876,8 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image width.
         */
-        q+=FormatMagickString(q,extent,"%.20g",(double)
-          (image->columns != 0 ? image->columns : image->magick_columns));
+        q+=FormatMagickString(q,extent,"%.20g",(double) (image->columns != 0 ?
+          image->columns : image->magick_columns));
         break;
       }
       case 'x':
@@ -2885,7 +2886,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
           Image horizontal resolution.
         */
         q+=FormatMagickString(q,extent,"%g %s",image->x_resolution,
-          MagickOptionToMnemonic(MagickResolutionOptions,(ssize_t)
+          CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t)
             image->units));
         break;
       }
@@ -2895,7 +2896,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
           Image vertical resolution.
         */
         q+=FormatMagickString(q,extent,"%g %s",image->y_resolution,
-          MagickOptionToMnemonic(MagickResolutionOptions,(ssize_t)
+          CommandOptionToMnemonic(MagickResolutionOptions,(ssize_t)
           image->units));
         break;
       }
@@ -2912,7 +2913,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image alpha channel.
         */
-        q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+        q+=FormatMagickString(q,extent,"%s",CommandOptionToMnemonic(
           MagickBooleanOptions,(ssize_t) image->matte));
         break;
       }
@@ -2921,7 +2922,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image compression method.
         */
-        q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+        q+=FormatMagickString(q,extent,"%s",CommandOptionToMnemonic(
           MagickCompressOptions,(ssize_t) image->compression));
         break;
       }
@@ -2930,7 +2931,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image dispose method.
         */
-        q+=FormatMagickString(q,extent,"%s",MagickOptionToMnemonic(
+        q+=FormatMagickString(q,extent,"%s",CommandOptionToMnemonic(
           MagickDisposeOptions,(ssize_t) image->dispose));
         break;
       }
@@ -2942,14 +2943,13 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
       }
       case 'H':
       {
-        q+=FormatMagickString(q,extent,"%.20g",(double)
-          image->page.height);
+        q+=FormatMagickString(q,extent,"%.20g",(double) image->page.height);
         break;
       }
       case 'O':
       {
-        q+=FormatMagickString(q,extent,"%+ld%+ld",(long) image->page.x,
-          (long) image->page.y);
+        q+=FormatMagickString(q,extent,"%+ld%+ld",(long) image->page.x,(long)
+          image->page.y);
         break;
       }
       case 'P':
@@ -2968,11 +2968,11 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Image scenes.
         */
-        if (text_info->number_scenes == 0)
+        if (image_info->number_scenes == 0)
           q+=CopyMagickString(q,"2147483647",extent);
         else
-          q+=FormatMagickString(q,extent,"%.20g",(double)
-            (text_info->scene+text_info->number_scenes));
+          q+=FormatMagickString(q,extent,"%.20g",(double) (image_info->scene+
+            image_info->number_scenes));
         break;
       }
       case 'T':
@@ -3000,7 +3000,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
         /*
           Unique filename.
         */
-        (void) CopyMagickString(filename,text_info->zero,extent);
+        (void) CopyMagickString(filename,image_info->zero,extent);
         q+=CopyMagickString(q,filename,extent);
         break;
       }
@@ -3083,7 +3083,7 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
                 key=GetNextImageProperty(image);
               }
             }
-        value=GetMagickProperty(text_info,image,pattern);
+        value=GetMagickProperty(image_info,image,pattern);
         if (value != (const char *) NULL)
           {
             length=strlen(value);
@@ -3161,7 +3161,6 @@ MagickExport char *InterpretImageProperties(const ImageInfo *image_info,
     }
   }
   *q='\0';
-  text_info=DestroyImageInfo(text_info);
   if (text != (const char *) embed_text)
     text=DestroyString(text);
   (void) SubstituteString(&interpret_text,"&lt;","<");
@@ -3326,7 +3325,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             colorspace;
 
-          colorspace=ParseMagickOption(MagickColorspaceOptions,MagickFalse,
+          colorspace=ParseCommandOption(MagickColorspaceOptions,MagickFalse,
             value);
           if (colorspace < 0)
             break;
@@ -3338,7 +3337,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             compose;
 
-          compose=ParseMagickOption(MagickComposeOptions,MagickFalse,value);
+          compose=ParseCommandOption(MagickComposeOptions,MagickFalse,value);
           if (compose < 0)
             break;
           image->compose=(CompositeOperator) compose;
@@ -3349,7 +3348,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             compression;
 
-          compression=ParseMagickOption(MagickCompressOptions,MagickFalse,
+          compression=ParseCommandOption(MagickCompressOptions,MagickFalse,
             value);
           if (compression < 0)
             break;
@@ -3408,7 +3407,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             dispose;
 
-          dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,value);
+          dispose=ParseCommandOption(MagickDisposeOptions,MagickFalse,value);
           if (dispose < 0)
             break;
           image->dispose=(DisposeType) dispose;
@@ -3426,7 +3425,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             gravity;
 
-          gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,value);
+          gravity=ParseCommandOption(MagickGravityOptions,MagickFalse,value);
           if (gravity < 0)
             break;
           image->gravity=(GravityType) gravity;
@@ -3444,7 +3443,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             rendering_intent;
 
-          rendering_intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
+          rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
             value);
           if (rendering_intent < 0)
             break;
@@ -3456,7 +3455,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             interpolate;
 
-          interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
+          interpolate=ParseCommandOption(MagickInterpolateOptions,MagickFalse,
             value);
           if (interpolate < 0)
             break;
@@ -3521,7 +3520,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             rendering_intent;
 
-          rendering_intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
+          rendering_intent=ParseCommandOption(MagickIntentOptions,MagickFalse,
             value);
           if (rendering_intent < 0)
             break;
@@ -3557,7 +3556,7 @@ MagickExport MagickBooleanType SetImageProperty(Image *image,
           ssize_t
             units;
 
-          units=ParseMagickOption(MagickResolutionOptions,MagickFalse,value);
+          units=ParseCommandOption(MagickResolutionOptions,MagickFalse,value);
           if (units < 0)
             break;
           image->units=(ResolutionType) units;