convert.c

Go to the documentation of this file.
00001 /*
00002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00003 %                                                                             %
00004 %                                                                             %
00005 %                                                                             %
00006 %                CCCC   OOO   N   N  V   V  EEEEE  RRRR   TTTTT               %
00007 %               C      O   O  NN  N  V   V  E      R   R    T                 %
00008 %               C      O   O  N N N  V   V  EEE    RRRR     T                 %
00009 %               C      O   O  N  NN   V V   E      R R      T                 %
00010 %                CCCC   OOO   N   N    V    EEEEE  R  R     T                 %
00011 %                                                                             %
00012 %                                                                             %
00013 %                Convert an image from one format to another.                 %
00014 %                                                                             %
00015 %                              Software Design                                %
00016 %                                John Cristy                                  %
00017 %                                April 1992                                   %
00018 %                                                                             %
00019 %                                                                             %
00020 %  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
00021 %  dedicated to making software imaging solutions freely available.           %
00022 %                                                                             %
00023 %  You may not use this file except in compliance with the License.  You may  %
00024 %  obtain a copy of the License at                                            %
00025 %                                                                             %
00026 %    http://www.imagemagick.org/script/license.php                            %
00027 %                                                                             %
00028 %  Unless required by applicable law or agreed to in writing, software        %
00029 %  distributed under the License is distributed on an "AS IS" BASIS,          %
00030 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
00031 %  See the License for the specific language governing permissions and        %
00032 %  limitations under the License.                                             %
00033 %                                                                             %
00034 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00035 %
00036 %  Use the convert program to convert between image formats as well as resize
00037 %  an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample,
00038 %  and much more.
00039 %
00040 */
00041 
00042 /*
00043   Include declarations.
00044 */
00045 #include "wand/studio.h"
00046 #include "wand/MagickWand.h"
00047 #include "wand/mogrify-private.h"
00048 
00049 /*
00050   Define declarations.
00051 */
00052 #define ThrowFileException(exception,severity,tag,context) \
00053 { \
00054   (void) ThrowMagickException(exception,GetMagickModule(),severity, \
00055     tag == (const char *) NULL ? "unknown" : tag,"`%s': %s",context, \
00056     GetExceptionMessage(errno)); \
00057 }
00058 
00059 /*
00060 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00061 %                                                                             %
00062 %                                                                             %
00063 %                                                                             %
00064 +   C o n v e r t I m a g e C o m m a n d                                     %
00065 %                                                                             %
00066 %                                                                             %
00067 %                                                                             %
00068 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
00069 %
00070 %  ConvertImageCommand() reads one or more images, applies one or more image
00071 %  processing operations, and writes out the image in the same or differing
00072 %  format.
00073 %
00074 %  The format of the ConvertImageCommand method is:
00075 %
00076 %      MagickBooleanType ConvertImageCommand(ImageInfo *image_info,int argc,
00077 %        char **argv,char **metadata,ExceptionInfo *exception)
00078 %
00079 %  A description of each parameter follows:
00080 %
00081 %    o image_info: the image info.
00082 %
00083 %    o argc: the number of elements in the argument vector.
00084 %
00085 %    o argv: A text array containing the command line arguments.
00086 %
00087 %    o metadata: any metadata is returned here.
00088 %
00089 %    o exception: return any errors or warnings in this structure.
00090 %
00091 */
00092 
00093 static MagickBooleanType ConcatenateImages(int argc,char **argv,
00094   ExceptionInfo *exception)
00095 {
00096   FILE
00097     *input,
00098     *output;
00099 
00100   int
00101     c;
00102 
00103   register long
00104     i;
00105 
00106   /*
00107     Open output file.
00108   */
00109   output=OpenMagickStream(argv[argc-1],"wb");
00110   if (output == (FILE *) NULL)
00111     {
00112       ThrowFileException(exception,FileOpenError,"UnableToOpenFile",
00113         argv[argc-1]);
00114       return(MagickFalse);
00115     }
00116   for (i=2; i < (long) (argc-1); i++)
00117   {
00118     input=OpenMagickStream(argv[i],"rb");
00119     if (input == (FILE *) NULL)
00120       ThrowFileException(exception,FileOpenError,"UnableToOpenFile",argv[i]);
00121     for (c=fgetc(input); c != EOF; c=fgetc(input))
00122       (void) fputc((char) c,output);
00123     (void) fclose(input);
00124     (void) remove(argv[i]);
00125   }
00126   (void) fclose(output);
00127   return(MagickTrue);
00128 }
00129 
00130 static MagickBooleanType ConvertUsage(void)
00131 {
00132   static const char
00133     *miscellaneous[]=
00134     {
00135       "-debug events        display copious debugging information",
00136       "-help                print program options",
00137       "-list type           print a list of supported option arguments",
00138       "-log format          format of debugging information",
00139       "-version             print version information",
00140       (char *) NULL
00141     },
00142     *operators[]=
00143     {
00144       "-adaptive-blur geometry",
00145       "                     adaptively blur pixels; decrease effect near edges",
00146       "-adaptive-resize geometry",
00147       "                     adaptively resize image using 'mesh' interpolation",
00148       "-adaptive-sharpen geometry",
00149       "                     adaptively sharpen pixels; increase effect near edges",
00150       "-alpha option        on, activate, off, deactivate, set, opaque, copy",
00151       "                     transparent, extract, background, or shape",
00152       "-annotate geometry text",
00153       "                     annotate the image with text",
00154       "-auto-gamma          automagically adjust gamma level of image",
00155       "-auto-level          automagically adjust color levels of image",
00156       "-auto-orient         automagically orient (rotate) image",
00157       "-bench iterations    measure performance",
00158       "-black-threshold value",
00159       "                     force all pixels below the threshold into black",
00160       "-blue-shift factor   simulate a scene at nighttime in the moonlight",
00161       "-blur geometry       reduce image noise and reduce detail levels",
00162       "-border geometry     surround image with a border of color",
00163       "-bordercolor color   border color",
00164       "-brightness-contrast geometry",
00165       "                     improve brightness / contrast of the image",
00166       "-cdl filename        color correct with a color decision list",
00167       "-charcoal radius     simulate a charcoal drawing",
00168       "-chop geometry       remove pixels from the image interior",
00169       "-clamp               restrict pixel range from 0 to the quantum depth",
00170       "-clip                clip along the first path from the 8BIM profile",
00171       "-clip-mask filename  associate a clip mask with the image",
00172       "-clip-path id        clip along a named path from the 8BIM profile",
00173       "-colorize value      colorize the image with the fill color",
00174       "-contrast            enhance or reduce the image contrast",
00175       "-contrast-stretch geometry",
00176       "                     improve contrast by `stretching' the intensity range",
00177       "-convolve coefficients",
00178       "                     apply a convolution kernel to the image",
00179       "-cycle amount        cycle the image colormap",
00180       "-decipher filename   convert cipher pixels to plain pixels",
00181       "-deskew threshold    straighten an image",
00182       "-despeckle           reduce the speckles within an image",
00183       "-distort method args",
00184       "                     distort images according to given method ad args",
00185       "-draw string         annotate the image with a graphic primitive",
00186       "-edge radius         apply a filter to detect edges in the image",
00187       "-encipher filename   convert plain pixels to cipher pixels",
00188       "-emboss radius       emboss an image",
00189       "-enhance             apply a digital filter to enhance a noisy image",
00190       "-equalize            perform histogram equalization to an image",
00191       "-evaluate operator value",
00192       "                     evaluate an arithmetic, relational, or logical expression",
00193       "-extent geometry     set the image size",
00194       "-extract geometry    extract area from image",
00195       "-fft                 implements the discrete Fourier transform (DFT)",
00196       "-flip                flip image vertically",
00197       "-floodfill geometry color",
00198       "                     floodfill the image with color",
00199       "-flop                flop image horizontally",
00200       "-frame geometry      surround image with an ornamental border",
00201       "-function name parameters",
00202       "                     apply function over image values",
00203       "-gamma value         level of gamma correction",
00204       "-gaussian-blur geometry",
00205       "                     reduce image noise and reduce detail levels",
00206       "-geometry geometry   preferred size or location of the image",
00207       "-identify            identify the format and characteristics of the image",
00208       "-ift                 implements the inverse discrete Fourier transform (DFT)",
00209       "-implode amount      implode image pixels about the center",
00210       "-lat geometry        local adaptive thresholding",
00211       "-layers method       optimize, merge,  or compare image layers",
00212       "-level value         adjust the level of image contrast",
00213       "-level-colors color,color",
00214       "                     level image with the given colors",
00215       "-linear-stretch geometry",
00216       "                     improve contrast by `stretching with saturation'",
00217       "-liquid-rescale geometry",
00218       "                     rescale image with seam-carving",
00219       "-median radius       apply a median filter to the image",
00220       "-modulate value      vary the brightness, saturation, and hue",
00221       "-monochrome          transform image to black and white",
00222       "-morphology method kernel",
00223       "                     apply a morphology method to the image",
00224       "-motion-blur geometry",
00225       "                     simulate motion blur",
00226       "-negate              replace every pixel with its complementary color ",
00227       "-noise radius        add or reduce noise in an image",
00228       "-normalize           transform image to span the full range of colors",
00229       "-opaque color        change this color to the fill color",
00230       "-ordered-dither NxN",
00231       "                     add a noise pattern to the image with specific",
00232       "                     amplitudes",
00233       "-paint radius        simulate an oil painting",
00234       "-polaroid angle      simulate a Polaroid picture",
00235       "-posterize levels    reduce the image to a limited number of color levels",
00236       "-print string        interpret string and print to console",
00237       "-profile filename    add, delete, or apply an image profile",
00238       "-quantize colorspace reduce colors in this colorspace",
00239       "-radial-blur angle   radial blur the image",
00240       "-raise value         lighten/darken image edges to create a 3-D effect",
00241       "-random-threshold low,high",
00242       "                     random threshold the image",
00243       "-recolor matrix      translate, scale, shear, or rotate image colors",
00244       "-region geometry     apply options to a portion of the image",
00245       "-render              render vector graphics",
00246       "-repage geometry     size and location of an image canvas",
00247       "-resample geometry   change the resolution of an image",
00248       "-resize geometry     resize the image",
00249       "-roll geometry       roll an image vertically or horizontally",
00250       "-rotate degrees      apply Paeth rotation to the image",
00251       "-sample geometry     scale image with pixel sampling",
00252       "-scale geometry      scale the image",
00253       "-segment values      segment an image",
00254       "-selective-blur geometry",
00255       "                     selectively blur pixels within a contrast threshold",
00256       "-sepia-tone threshold",
00257       "                     simulate a sepia-toned photo",
00258       "-set property value  set an image property",
00259       "-shade degrees       shade the image using a distant light source",
00260       "-shadow geometry     simulate an image shadow",
00261       "-sharpen geometry    sharpen the image",
00262       "-shave geometry      shave pixels from the image edges",
00263       "-shear geometry      slide one edge of the image along the X or Y axis",
00264       "-sigmoidal-contrast geometry",
00265       "                     increase the contrast without saturating highlights or shadows",
00266       "-sketch geometry     simulate a pencil sketch",
00267       "-solarize threshold  negate all pixels above the threshold level",
00268       "-sparse-color method args",
00269       "                     fill in a image based on a few color points",
00270       "-splice geometry     splice the background color into the image",
00271       "-spread radius       displace image pixels by a random amount",
00272       "-strip               strip image of all profiles and comments",
00273       "-swirl degrees       swirl image pixels about the center",
00274       "-threshold value     threshold the image",
00275       "-thumbnail geometry  create a thumbnail of the image",
00276       "-tile filename       tile image when filling a graphic primitive",
00277       "-tint value          tint the image with the fill color",
00278       "-transform           affine transform image",
00279       "-transparent color   make this color transparent within the image",
00280       "-transpose           flip image vertically and rotate 90 degrees",
00281       "-transverse          flop image horizontally and rotate 270 degrees",
00282       "-trim                trim image edges",
00283       "-type type           image type",
00284       "-unique-colors       discard all but one of any pixel color",
00285       "-unsharp geometry    sharpen the image",
00286       "-vignette geometry   soften the edges of the image in vignette style",
00287       "-wave geometry       alter an image along a sine wave",
00288       "-white-threshold value",
00289       "                     force all pixels above the threshold into white",
00290       (char *) NULL
00291     },
00292     *sequence_operators[]=
00293     {
00294       "-append              append an image sequence",
00295       "-clut                apply a color lookup table to the image",
00296       "-coalesce            merge a sequence of images",
00297       "-combine             combine a sequence of images",
00298       "-composite           composite image",
00299       "-crop geometry       cut out a rectangular region of the image",
00300       "-deconstruct         break down an image sequence into constituent parts",
00301       "-evaluate-sequence operator",
00302       "                     evaluate an arithmetic, relational, or logical expression",
00303       "-flatten             flatten a sequence of images",
00304       "-fx expression       apply mathematical expression to an image channel(s)",
00305       "-hald-clut           apply a Hald color lookup table to the image",
00306       "-morph value         morph an image sequence",
00307       "-mosaic              create a mosaic from an image sequence",
00308       "-process arguments   process the image with a custom image filter",
00309       "-reverse             reverse image sequence",
00310       "-separate            separate an image channel into a grayscale image",
00311       "-write filename      write images to this file",
00312       (char *) NULL
00313     },
00314     *settings[]=
00315     {
00316       "-adjoin              join images into a single multi-image file",
00317       "-affine matrix       affine transform matrix",
00318       "-alpha option        activate, deactivate, reset, or set the alpha channel",
00319       "-antialias           remove pixel-aliasing",
00320       "-authenticate password",
00321       "                     decipher image with this password",
00322       "-attenuate value     lessen (or intensify) when adding noise to an image",
00323       "-background color    background color",
00324       "-bias value          add bias when convolving an image",
00325       "-black-point-compensation",
00326       "                     use black point compensation",
00327       "-blue-primary point  chromaticity blue primary point",
00328       "-bordercolor color   border color",
00329       "-caption string      assign a caption to an image",
00330       "-channel type        apply option to select image channels",
00331       "-colors value        preferred number of colors in the image",
00332       "-colorspace type     alternate image colorspace",
00333       "-comment string      annotate image with comment",
00334       "-compose operator    set image composite operator",
00335       "-compress type       type of pixel compression when writing the image",
00336       "-define format:option",
00337       "                     define one or more image format options",
00338       "-delay value         display the next image after pausing",
00339       "-density geometry    horizontal and vertical density of the image",
00340       "-depth value         image depth",
00341       "-display server      get image or font from this X server",
00342       "-dispose method      layer disposal method",
00343       "-dither method       apply error diffusion to image",
00344       "-encoding type       text encoding type",
00345       "-endian type         endianness (MSB or LSB) of the image",
00346       "-family name         render text with this font family",
00347       "-fill color          color to use when filling a graphic primitive",
00348       "-filter type         use this filter when resizing an image",
00349       "-font name           render text with this font",
00350       "-format \"string\"     output formatted image characteristics",
00351       "-fuzz distance       colors within this distance are considered equal",
00352       "-gravity type        horizontal and vertical text placement",
00353       "-green-primary point chromaticity green primary point",
00354       "-intent type         type of rendering intent when managing the image color",
00355       "-interlace type      type of image interlacing scheme",
00356       "-interline-spacing value",
00357       "                     set the space between two text lines",
00358       "-interpolate method  pixel color interpolation method",
00359       "-interword-spacing value",
00360       "                     set the space between two words",
00361       "-kerning value       set the space between two letters",
00362       "-label string        assign a label to an image",
00363       "-limit type value    pixel cache resource limit",
00364       "-loop iterations     add Netscape loop extension to your GIF animation",
00365       "-mask filename       associate a mask with the image",
00366       "-mattecolor color    frame color",
00367       "-monitor             monitor progress",
00368       "-orient type         image orientation",
00369       "-page geometry       size and location of an image canvas (setting)",
00370       "-ping                efficiently determine image attributes",
00371       "-pointsize value     font point size",
00372       "-precision value     maximum number of significant digits to print",
00373       "-preview type        image preview type",
00374       "-quality value       JPEG/MIFF/PNG compression level",
00375       "-quiet               suppress all warning messages",
00376       "-red-primary point   chromaticity red primary point",
00377       "-regard-warnings     pay attention to warning messages",
00378       "-remap filename      transform image colors to match this set of colors",
00379       "-respect-parentheses settings remain in effect until parenthesis boundary",
00380       "-sampling-factor geometry",
00381       "                     horizontal and vertical sampling factor",
00382       "-scene value         image scene number",
00383       "-seed value          seed a new sequence of pseudo-random numbers",
00384       "-size geometry       width and height of image",
00385       "-stretch type        render text with this font stretch",
00386       "-stroke color        graphic primitive stroke color",
00387       "-strokewidth value   graphic primitive stroke width",
00388       "-style type          render text with this font style",
00389       "-taint               image as ineligible for bi-modal delegate",
00390       "-texture filename    name of texture to tile onto the image background",
00391       "-tile-offset geometry",
00392       "                     tile offset",
00393       "-treedepth value     color tree depth",
00394       "-transparent-color color",
00395       "                     transparent color",
00396       "-undercolor color    annotation bounding box color",
00397       "-units type          the units of image resolution",
00398       "-verbose             print detailed information about the image",
00399       "-view                FlashPix viewing transforms",
00400       "-virtual-pixel method",
00401       "                     virtual pixel access method",
00402       "-weight type         render text with this font weight",
00403       "-white-point point   chromaticity white point",
00404       (char *) NULL
00405     },
00406     *stack_operators[]=
00407     {
00408       "-clone index         clone an image",
00409       "-delete index        delete the image from the image sequence",
00410       "-insert index        insert last image into the image sequence",
00411       "-swap indexes        swap two images in the image sequence",
00412       (char *) NULL
00413     };
00414 
00415   const char
00416     **p;
00417 
00418   (void) printf("Version: %s\n",GetMagickVersion((unsigned long *) NULL));
00419   (void) printf("Copyright: %s\n",GetMagickCopyright());
00420   (void) printf("Features: %s\n\n",GetMagickFeatures());
00421   (void) printf("Usage: %s [options ...] file [ [options ...] "
00422     "file ...] [options ...] file\n",GetClientName());
00423   (void) printf("\nImage Settings:\n");
00424   for (p=settings; *p != (char *) NULL; p++)
00425     (void) printf("  %s\n",*p);
00426   (void) printf("\nImage Operators:\n");
00427   for (p=operators; *p != (char *) NULL; p++)
00428     (void) printf("  %s\n",*p);
00429   (void) printf("\nImage Sequence Operators:\n");
00430   for (p=sequence_operators; *p != (char *) NULL; p++)
00431     (void) printf("  %s\n",*p);
00432   (void) printf("\nImage Stack Operators:\n");
00433   for (p=stack_operators; *p != (char *) NULL; p++)
00434     (void) printf("  %s\n",*p);
00435   (void) printf("\nMiscellaneous Options:\n");
00436   for (p=miscellaneous; *p != (char *) NULL; p++)
00437     (void) printf("  %s\n",*p);
00438   (void) printf(
00439     "\nBy default, the image format of `file' is determined by its magic\n");
00440   (void) printf(
00441     "number.  To specify a particular image format, precede the filename\n");
00442   (void) printf(
00443     "with an image format name and a colon (i.e. ps:image) or specify the\n");
00444   (void) printf(
00445     "image type as the filename suffix (i.e. image.ps).  Specify 'file' as\n");
00446   (void) printf("'-' for standard input or output.\n");
00447   return(MagickFalse);
00448 }
00449 
00450 WandExport MagickBooleanType ConvertImageCommand(ImageInfo *image_info,
00451   int argc,char **argv,char **metadata,ExceptionInfo *exception)
00452 {
00453 #define NotInitialized  (unsigned int) (~0)
00454 #define DestroyConvert() \
00455 { \
00456   DestroyImageStack(); \
00457   for (i=0; i < (long) argc; i++) \
00458     argv[i]=DestroyString(argv[i]); \
00459   argv=(char **) RelinquishMagickMemory(argv); \
00460 }
00461 #define ThrowConvertException(asperity,tag,option) \
00462 { \
00463   (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
00464     option); \
00465   DestroyConvert(); \
00466   return(MagickFalse); \
00467 }
00468 #define ThrowConvertInvalidArgumentException(option,argument) \
00469 { \
00470   (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
00471     "InvalidArgument","`%s': %s",option,argument); \
00472   DestroyConvert(); \
00473   return(MagickFalse); \
00474 }
00475 
00476   char
00477     *filename,
00478     *option;
00479 
00480   const char
00481     *format;
00482 
00483   Image
00484     *image;
00485 
00486   ImageStack
00487     image_stack[MaxImageStackDepth+1];
00488 
00489   long
00490     j,
00491     k;
00492 
00493   MagickBooleanType
00494     fire,
00495     pend;
00496 
00497   MagickStatusType
00498     status;
00499 
00500   register long
00501     i;
00502 
00503   /*
00504     Set defaults.
00505   */
00506   assert(image_info != (ImageInfo *) NULL);
00507   assert(image_info->signature == MagickSignature);
00508   if (image_info->debug != MagickFalse)
00509     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
00510   assert(exception != (ExceptionInfo *) NULL);
00511   if (argc == 2)
00512     {
00513       option=argv[1];
00514       if ((LocaleCompare("version",option+1) == 0) ||
00515           (LocaleCompare("-version",option+1) == 0))
00516         {
00517           (void) fprintf(stdout,"Version: %s\n",
00518             GetMagickVersion((unsigned long *) NULL));
00519           (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
00520           (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
00521           return(MagickFalse);
00522         }
00523     }
00524   if (argc < 3)
00525     return(ConvertUsage());
00526   filename=(char *) NULL;
00527   format="%w,%h,%m";
00528   j=1;
00529   k=0;
00530   NewImageStack();
00531   option=(char *) NULL;
00532   pend=MagickFalse;
00533   status=MagickTrue;
00534   /*
00535     Parse command-line arguments.
00536   */
00537   ReadCommandlLine(argc,&argv);
00538   status=ExpandFilenames(&argc,&argv);
00539   if (status == MagickFalse)
00540     ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
00541       GetExceptionMessage(errno));
00542   if ((argc > 2) && (LocaleCompare("-concatenate",argv[1]) == 0))
00543     return(ConcatenateImages(argc,argv,exception));
00544   for (i=1; i < (long) (argc-1); i++)
00545   {
00546     option=argv[i];
00547     if (LocaleCompare(option,"(") == 0)
00548       {
00549         FireImageStack(MagickTrue,MagickTrue,pend);
00550         if (k == MaxImageStackDepth)
00551           ThrowConvertException(OptionError,"ParenthesisNestedTooDeeply",
00552             option);
00553         PushImageStack();
00554         continue;
00555       }
00556     if (LocaleCompare(option,")") == 0)
00557       {
00558         FireImageStack(MagickTrue,MagickTrue,MagickTrue);
00559         if (k == 0)
00560           ThrowConvertException(OptionError,"UnableToParseExpression",option);
00561         PopImageStack();
00562         continue;
00563       }
00564     if (IsMagickOption(option) == MagickFalse)
00565       {
00566         Image
00567           *images;
00568 
00569         /*
00570           Read input image.
00571         */
00572         FireImageStack(MagickTrue,MagickTrue,pend);
00573         filename=argv[i];
00574         if ((LocaleCompare(filename,"--") == 0) && (i < (argc-1)))
00575           filename=argv[++i];
00576         (void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
00577         if (image_info->ping != MagickFalse)
00578           images=PingImages(image_info,exception);
00579         else
00580           images=ReadImages(image_info,exception);
00581         status&=(images != (Image *) NULL) &&
00582           (exception->severity < ErrorException);
00583         if (images == (Image *) NULL)
00584           continue;
00585         AppendImageStack(images);
00586         continue;
00587       }
00588     pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
00589     switch (*(option+1))
00590     {
00591       case 'a':
00592       {
00593         if (LocaleCompare("adaptive-blur",option+1) == 0)
00594           {
00595             i++;
00596             if (i == (long) (argc-1))
00597               ThrowConvertException(OptionError,"MissingArgument",option);
00598             if (IsGeometry(argv[i]) == MagickFalse)
00599               ThrowConvertInvalidArgumentException(option,argv[i]);
00600             break;
00601           }
00602         if (LocaleCompare("adaptive-resize",option+1) == 0)
00603           {
00604             i++;
00605             if (i == (long) (argc-1))
00606               ThrowConvertException(OptionError,"MissingArgument",option);
00607             if (IsGeometry(argv[i]) == MagickFalse)
00608               ThrowConvertInvalidArgumentException(option,argv[i]);
00609             break;
00610           }
00611         if (LocaleCompare("adaptive-sharpen",option+1) == 0)
00612           {
00613             i++;
00614             if (i == (long) (argc-1))
00615               ThrowConvertException(OptionError,"MissingArgument",option);
00616             if (IsGeometry(argv[i]) == MagickFalse)
00617               ThrowConvertInvalidArgumentException(option,argv[i]);
00618             break;
00619           }
00620         if (LocaleCompare("adjoin",option+1) == 0)
00621           break;
00622         if (LocaleCompare("affine",option+1) == 0)
00623           {
00624             if (*option == '+')
00625               break;
00626             i++;
00627             if (i == (long) (argc-1))
00628               ThrowConvertException(OptionError,"MissingArgument",option);
00629             if (IsGeometry(argv[i]) == MagickFalse)
00630               ThrowConvertInvalidArgumentException(option,argv[i]);
00631             break;
00632           }
00633         if (LocaleCompare("alpha",option+1) == 0)
00634           {
00635             long
00636               type;
00637 
00638             if (*option == '+')
00639               break;
00640             i++;
00641             if (i == (long) argc)
00642               ThrowConvertException(OptionError,"MissingArgument",option);
00643             type=ParseMagickOption(MagickAlphaOptions,MagickFalse,argv[i]);
00644             if (type < 0)
00645               ThrowConvertException(OptionError,"UnrecognizedAlphaChannelType",
00646                 argv[i]);
00647             break;
00648           }
00649         if (LocaleCompare("annotate",option+1) == 0)
00650           {
00651             if (*option == '+')
00652               break;
00653             i++;
00654             if (i == (long) (argc-1))
00655               ThrowConvertException(OptionError,"MissingArgument",option);
00656             if (IsGeometry(argv[i]) == MagickFalse)
00657               ThrowConvertInvalidArgumentException(option,argv[i]);
00658             i++;
00659             if (i == (long) (argc-1))
00660               ThrowConvertException(OptionError,"MissingArgument",option);
00661             break;
00662           }
00663         if (LocaleCompare("antialias",option+1) == 0)
00664           break;
00665         if (LocaleCompare("append",option+1) == 0)
00666           break;
00667         if (LocaleCompare("attenuate",option+1) == 0)
00668           {
00669             if (*option == '+')
00670               break;
00671             i++;
00672             if (i == (long) (argc-1))
00673               ThrowConvertException(OptionError,"MissingArgument",option);
00674             if (IsGeometry(argv[i]) == MagickFalse)
00675               ThrowConvertInvalidArgumentException(option,argv[i]);
00676             break;
00677           }
00678         if (LocaleCompare("authenticate",option+1) == 0)
00679           {
00680             if (*option == '+')
00681               break;
00682             i++;
00683             if (i == (long) (argc-1))
00684               ThrowConvertException(OptionError,"MissingArgument",option);
00685             break;
00686           }
00687         if (LocaleCompare("auto-gamma",option+1) == 0)
00688           break;
00689         if (LocaleCompare("auto-level",option+1) == 0)
00690           break;
00691         if (LocaleCompare("auto-orient",option+1) == 0)
00692           break;
00693         if (LocaleCompare("average",option+1) == 0)
00694           break;
00695         ThrowConvertException(OptionError,"UnrecognizedOption",option)
00696       }
00697       case 'b':
00698       {
00699         if (LocaleCompare("background",option+1) == 0)
00700           {
00701             if (*option == '+')
00702               break;
00703             i++;
00704             if (i == (long) (argc-1))
00705               ThrowConvertException(OptionError,"MissingArgument",option);
00706             break;
00707           }
00708         if (LocaleCompare("bench",option+1) == 0)
00709           {
00710             if (*option == '+')
00711               break;
00712             i++;
00713             if (i == (long) (argc-1))
00714               ThrowConvertException(OptionError,"MissingArgument",option);
00715             if (IsGeometry(argv[i]) == MagickFalse)
00716               ThrowConvertInvalidArgumentException(option,argv[i]);
00717             break;
00718           }
00719         if (LocaleCompare("bias",option+1) == 0)
00720           {
00721             if (*option == '+')
00722               break;
00723             i++;
00724             if (i == (long) (argc-1))
00725               ThrowConvertException(OptionError,"MissingArgument",option);
00726             if (IsGeometry(argv[i]) == MagickFalse)
00727               ThrowConvertInvalidArgumentException(option,argv[i]);
00728             break;
00729           }
00730         if (LocaleCompare("black-point-compensation",option+1) == 0)
00731           break;
00732         if (LocaleCompare("black-threshold",option+1) == 0)
00733           {
00734             if (*option == '+')
00735               break;
00736             i++;
00737             if (i == (long) (argc-1))
00738               ThrowConvertException(OptionError,"MissingArgument",option);
00739             if (IsGeometry(argv[i]) == MagickFalse)
00740               ThrowConvertInvalidArgumentException(option,argv[i]);
00741             break;
00742           }
00743         if (LocaleCompare("blue-primary",option+1) == 0)
00744           {
00745             if (*option == '+')
00746               break;
00747             i++;
00748             if (i == (long) (argc-1))
00749               ThrowConvertException(OptionError,"MissingArgument",option);
00750             if (IsGeometry(argv[i]) == MagickFalse)
00751               ThrowConvertInvalidArgumentException(option,argv[i]);
00752             break;
00753           }
00754         if (LocaleCompare("blue-shift",option+1) == 0)
00755           {
00756             if (*option == '+')
00757               break;
00758             i++;
00759             if (i == (long) (argc-1))
00760               ThrowConvertException(OptionError,"MissingArgument",option);
00761             if (IsGeometry(argv[i]) == MagickFalse)
00762               ThrowConvertInvalidArgumentException(option,argv[i]);
00763             break;
00764           }
00765         if (LocaleCompare("blur",option+1) == 0)
00766           {
00767             if (*option == '+')
00768               break;
00769             i++;
00770             if (i == (long) (argc-1))
00771               ThrowConvertException(OptionError,"MissingArgument",option);
00772             if (IsGeometry(argv[i]) == MagickFalse)
00773               ThrowConvertInvalidArgumentException(option,argv[i]);
00774             break;
00775           }
00776         if (LocaleCompare("border",option+1) == 0)
00777           {
00778             if (*option == '+')
00779               break;
00780             i++;
00781             if (i == (long) (argc-1))
00782               ThrowConvertException(OptionError,"MissingArgument",option);
00783             if (IsGeometry(argv[i]) == MagickFalse)
00784               ThrowConvertInvalidArgumentException(option,argv[i]);
00785             break;
00786           }
00787         if (LocaleCompare("bordercolor",option+1) == 0)
00788           {
00789             if (*option == '+')
00790               break;
00791             i++;
00792             if (i == (long) (argc-1))
00793               ThrowConvertException(OptionError,"MissingArgument",option);
00794             break;
00795           }
00796         if (LocaleCompare("box",option+1) == 0)
00797           {
00798             if (*option == '+')
00799               break;
00800             i++;
00801             if (i == (long) (argc-1))
00802               ThrowConvertException(OptionError,"MissingArgument",option);
00803             break;
00804           }
00805         if (LocaleCompare("brightness-contrast",option+1) == 0)
00806           {
00807             i++;
00808             if (i == (long) (argc-1))
00809               ThrowConvertException(OptionError,"MissingArgument",option);
00810             if (IsGeometry(argv[i]) == MagickFalse)
00811               ThrowConvertInvalidArgumentException(option,argv[i]);
00812             break;
00813           }
00814         ThrowConvertException(OptionError,"UnrecognizedOption",option)
00815       }
00816       case 'c':
00817       {
00818         if (LocaleCompare("cache",option+1) == 0)
00819           {
00820             if (*option == '+')
00821               break;
00822             i++;
00823             if (i == (long) (argc-1))
00824               ThrowConvertException(OptionError,"MissingArgument",option);
00825             if (IsGeometry(argv[i]) == MagickFalse)
00826               ThrowConvertInvalidArgumentException(option,argv[i]);
00827             break;
00828           }
00829         if (LocaleCompare("caption",option+1) == 0)
00830           {
00831             if (*option == '+')
00832               break;
00833             i++;
00834             if (i == (long) argc)
00835               ThrowConvertException(OptionError,"MissingArgument",option);
00836             break;
00837           }
00838         if (LocaleCompare("cdl",option+1) == 0)
00839           {
00840             if (*option == '+')
00841               break;
00842             i++;
00843             if (i == (long) (argc-1))
00844               ThrowConvertException(OptionError,"MissingArgument",option);
00845             break;
00846           }
00847         if (LocaleCompare("channel",option+1) == 0)
00848           {
00849             long
00850               channel;
00851 
00852             if (*option == '+')
00853               break;
00854             i++;
00855             if (i == (long) (argc-1))
00856               ThrowConvertException(OptionError,"MissingArgument",option);
00857             channel=ParseChannelOption(argv[i]);
00858             if (channel < 0)
00859               ThrowConvertException(OptionError,"UnrecognizedChannelType",
00860                 argv[i]);
00861             break;
00862           }
00863         if (LocaleCompare("charcoal",option+1) == 0)
00864           {
00865             if (*option == '+')
00866               break;
00867             i++;
00868             if (i == (long) (argc-1))
00869               ThrowConvertException(OptionError,"MissingArgument",option);
00870             if (IsGeometry(argv[i]) == MagickFalse)
00871               ThrowConvertInvalidArgumentException(option,argv[i]);
00872             break;
00873           }
00874         if (LocaleCompare("chop",option+1) == 0)
00875           {
00876             if (*option == '+')
00877               break;
00878             i++;
00879             if (i == (long) (argc-1))
00880               ThrowConvertException(OptionError,"MissingArgument",option);
00881             if (IsGeometry(argv[i]) == MagickFalse)
00882               ThrowConvertInvalidArgumentException(option,argv[i]);
00883             break;
00884           }
00885         if (LocaleCompare("clamp",option+1) == 0)
00886           break;
00887         if (LocaleCompare("clip",option+1) == 0)
00888           break;
00889         if (LocaleCompare("clip-mask",option+1) == 0)
00890           {
00891             if (*option == '+')
00892               break;
00893             i++;
00894             if (i == (long) (argc-1))
00895               ThrowConvertException(OptionError,"MissingArgument",option);
00896             break;
00897           }
00898         if (LocaleCompare("clip-path",option+1) == 0)
00899           {
00900             i++;
00901             if (i == (long) (argc-1))
00902               ThrowConvertException(OptionError,"MissingArgument",option);
00903             break;
00904           }
00905         if (LocaleCompare("clone",option+1) == 0)
00906           {
00907             Image
00908               *clone_images;
00909 
00910             clone_images=image;
00911             if (k != 0)
00912               clone_images=image_stack[k-1].image;
00913             if (clone_images == (Image *) NULL)
00914               ThrowConvertException(ImageError,"ImageSequenceRequired",option);
00915             FireImageStack(MagickTrue,MagickTrue,MagickTrue);
00916             if (*option == '+')
00917               clone_images=CloneImages(clone_images,"-1",exception);
00918             else
00919               {
00920                 i++;
00921                 if (i == (long) (argc-1))
00922                   ThrowConvertException(OptionError,"MissingArgument",option);
00923                 if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
00924                   ThrowConvertInvalidArgumentException(option,argv[i]);
00925                 clone_images=CloneImages(clone_images,argv[i],exception);
00926               }
00927             if (clone_images == (Image *) NULL)
00928               ThrowConvertException(OptionError,"NoSuchImage",option);
00929             AppendImageStack(clone_images);
00930             break;
00931           }
00932         if (LocaleCompare("clut",option+1) == 0)
00933           break;
00934         if (LocaleCompare("coalesce",option+1) == 0)
00935           break;
00936         if (LocaleCompare("colorize",option+1) == 0)
00937           {
00938             if (*option == '+')
00939               break;
00940             i++;
00941             if (i == (long) (argc-1))
00942               ThrowConvertException(OptionError,"MissingArgument",option);
00943             if (IsGeometry(argv[i]) == MagickFalse)
00944               ThrowConvertInvalidArgumentException(option,argv[i]);
00945             break;
00946           }
00947         if (LocaleCompare("colors",option+1) == 0)
00948           {
00949             if (*option == '+')
00950               break;
00951             i++;
00952             if ((i == (long) (argc-1)) ||
00953                 (IsGeometry(argv[i]) == MagickFalse))
00954               ThrowConvertException(OptionError,"MissingArgument",option);
00955             break;
00956           }
00957         if (LocaleCompare("colorspace",option+1) == 0)
00958           {
00959             long
00960               colorspace;
00961 
00962             if (*option == '+')
00963               break;
00964             i++;
00965             if (i == (long) (argc-1))
00966               ThrowConvertException(OptionError,"MissingArgument",option);
00967             colorspace=ParseMagickOption(MagickColorspaceOptions,
00968               MagickFalse,argv[i]);
00969             if (colorspace < 0)
00970               ThrowConvertException(OptionError,"UnrecognizedColorspace",
00971                 argv[i]);
00972             break;
00973           }
00974         if (LocaleCompare("combine",option+1) == 0)
00975           break;
00976         if (LocaleCompare("comment",option+1) == 0)
00977           {
00978             if (*option == '+')
00979               break;
00980             i++;
00981             if (i == (long) argc)
00982               ThrowConvertException(OptionError,"MissingArgument",option);
00983             break;
00984           }
00985         if (LocaleCompare("compose",option+1) == 0)
00986           {
00987             long
00988               compose;
00989 
00990             if (*option == '+')
00991               break;
00992             i++;
00993             if (i == (long) argc)
00994               ThrowConvertException(OptionError,"MissingArgument",option);
00995             compose=ParseMagickOption(MagickComposeOptions,MagickFalse,
00996               argv[i]);
00997             if (compose < 0)
00998               ThrowConvertException(OptionError,"UnrecognizedComposeOperator",
00999                 argv[i]);
01000             break;
01001           }
01002         if (LocaleCompare("composite",option+1) == 0)
01003           break;
01004         if (LocaleCompare("compress",option+1) == 0)
01005           {
01006             long
01007               compress;
01008 
01009             if (*option == '+')
01010               break;
01011             i++;
01012             if (i == (long) (argc-1))
01013               ThrowConvertException(OptionError,"MissingArgument",option);
01014             compress=ParseMagickOption(MagickCompressOptions,MagickFalse,
01015               argv[i]);
01016             if (compress < 0)
01017               ThrowConvertException(OptionError,"UnrecognizedImageCompression",
01018                 argv[i]);
01019             break;
01020           }
01021         if (LocaleCompare("concurrent",option+1) == 0)
01022           break;
01023         if (LocaleCompare("contrast",option+1) == 0)
01024           break;
01025         if (LocaleCompare("contrast-stretch",option+1) == 0)
01026           {
01027             i++;
01028             if (i == (long) (argc-1))
01029               ThrowConvertException(OptionError,"MissingArgument",option);
01030             if (IsGeometry(argv[i]) == MagickFalse)
01031               ThrowConvertInvalidArgumentException(option,argv[i]);
01032             break;
01033           }
01034         if (LocaleCompare("convolve",option+1) == 0)
01035           {
01036             char
01037               token[MaxTextExtent];
01038 
01039             if (*option == '+')
01040               break;
01041             i++;
01042             if (i == (long) (argc-1))
01043               ThrowConvertException(OptionError,"MissingArgument",option);
01044 #if 1
01045             (void) token;
01046             if (IsGeometry(argv[i]) == MagickFalse)
01047               ThrowConvertInvalidArgumentException(option,argv[i]);
01048 #else
01049             /* Allow the use of built-in kernels like 'gaussian'
01050              * These may not work for kernels with 'nan' values, like 'diamond'
01051              */
01052             GetMagickToken(argv[i],NULL,token);
01053             if ( isalpha((int)token[0]) )
01054               {
01055                 long
01056                 op;
01057 
01058                 op=ParseMagickOption(MagickKernelOptions,MagickFalse,token);
01059                 if (op < 0)
01060                   ThrowConvertException(OptionError,"UnrecognizedKernelType",
01061                        token);
01062               }
01063             /* geometry is currently invalid if a 'nan' value is included */
01064             else if (IsGeometry(argv[i]) == MagickFalse)
01065               ThrowConvertInvalidArgumentException(option,argv[i]);
01066 #endif
01067             break;
01068           }
01069         if (LocaleCompare("crop",option+1) == 0)
01070           {
01071             if (*option == '+')
01072               break;
01073             i++;
01074             if (i == (long) (argc-1))
01075               ThrowConvertException(OptionError,"MissingArgument",option);
01076             if (IsGeometry(argv[i]) == MagickFalse)
01077               ThrowConvertInvalidArgumentException(option,argv[i]);
01078             break;
01079           }
01080         if (LocaleCompare("cycle",option+1) == 0)
01081           {
01082             if (*option == '+')
01083               break;
01084             i++;
01085             if (i == (long) (argc-1))
01086               ThrowConvertException(OptionError,"MissingArgument",option);
01087             if (IsGeometry(argv[i]) == MagickFalse)
01088               ThrowConvertInvalidArgumentException(option,argv[i]);
01089             break;
01090           }
01091         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01092       }
01093       case 'd':
01094       {
01095         if (LocaleCompare("decipher",option+1) == 0)
01096           {
01097             if (*option == '+')
01098               break;
01099             i++;
01100             if (i == (long) (argc-1))
01101               ThrowConvertException(OptionError,"MissingArgument",option);
01102             break;
01103           }
01104         if (LocaleCompare("deconstruct",option+1) == 0)
01105           break;
01106         if (LocaleCompare("debug",option+1) == 0)
01107           {
01108             long
01109               event;
01110 
01111             if (*option == '+')
01112               break;
01113             i++;
01114             if (i == (long) argc)
01115               ThrowConvertException(OptionError,"MissingArgument",option);
01116             event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
01117             if (event < 0)
01118               ThrowConvertException(OptionError,"UnrecognizedEventType",
01119                 argv[i]);
01120             (void) SetLogEventMask(argv[i]);
01121             break;
01122           }
01123         if (LocaleCompare("define",option+1) == 0)
01124           {
01125             i++;
01126             if (i == (long) argc)
01127               ThrowConvertException(OptionError,"MissingArgument",option);
01128             if (*option == '+')
01129               {
01130                 const char
01131                   *define;
01132 
01133                 define=GetImageOption(image_info,argv[i]);
01134                 if (define == (const char *) NULL)
01135                   ThrowConvertException(OptionError,"NoSuchOption",argv[i]);
01136                 break;
01137               }
01138             break;
01139           }
01140         if (LocaleCompare("delay",option+1) == 0)
01141           {
01142             if (*option == '+')
01143               break;
01144             i++;
01145             if (i == (long) argc)
01146               ThrowConvertException(OptionError,"MissingArgument",option);
01147             if (IsGeometry(argv[i]) == MagickFalse)
01148               ThrowConvertInvalidArgumentException(option,argv[i]);
01149             break;
01150           }
01151         if (LocaleCompare("density",option+1) == 0)
01152           {
01153             if (*option == '+')
01154               break;
01155             i++;
01156             if (i == (long) (argc-1))
01157               ThrowConvertException(OptionError,"MissingArgument",option);
01158             if (IsGeometry(argv[i]) == MagickFalse)
01159               ThrowConvertInvalidArgumentException(option,argv[i]);
01160             break;
01161           }
01162         if (LocaleCompare("depth",option+1) == 0)
01163           {
01164             if (*option == '+')
01165               break;
01166             i++;
01167             if (i == (long) (argc-1))
01168               ThrowConvertException(OptionError,"MissingArgument",option);
01169             if (IsGeometry(argv[i]) == MagickFalse)
01170               ThrowConvertInvalidArgumentException(option,argv[i]);
01171             break;
01172           }
01173         if (LocaleCompare("delete",option+1) == 0)
01174           {
01175             if (*option == '+')
01176               break;
01177             i++;
01178             if (i == (long) (argc-1))
01179               ThrowConvertException(OptionError,"MissingArgument",option);
01180             if (IsSceneGeometry(argv[i],MagickFalse) == MagickFalse)
01181               ThrowConvertInvalidArgumentException(option,argv[i]);
01182             break;
01183           }
01184         if (LocaleCompare("deskew",option+1) == 0)
01185           {
01186             if (*option == '+')
01187               break;
01188             i++;
01189             if (i == (long) (argc-1))
01190               ThrowConvertException(OptionError,"MissingArgument",option);
01191             if (IsGeometry(argv[i]) == MagickFalse)
01192               ThrowConvertInvalidArgumentException(option,argv[i]);
01193             break;
01194           }
01195         if (LocaleCompare("despeckle",option+1) == 0)
01196           break;
01197         if (LocaleCompare("display",option+1) == 0)
01198           {
01199             if (*option == '+')
01200               break;
01201             i++;
01202             if (i == (long) (argc-1))
01203               ThrowConvertException(OptionError,"MissingArgument",option);
01204             break;
01205           }
01206         if (LocaleCompare("dispose",option+1) == 0)
01207           {
01208             long
01209               dispose;
01210 
01211             if (*option == '+')
01212               break;
01213             i++;
01214             if (i == (long) argc)
01215               ThrowConvertException(OptionError,"MissingArgument",option);
01216             dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
01217             if (dispose < 0)
01218               ThrowConvertException(OptionError,"UnrecognizedDisposeMethod",
01219                 argv[i]);
01220             break;
01221           }
01222         if (LocaleCompare("distort",option+1) == 0)
01223           {
01224             long
01225               op;
01226 
01227             i++;
01228             if (i == (long) argc)
01229               ThrowConvertException(OptionError,"MissingArgument",option);
01230             op=ParseMagickOption(MagickDistortOptions,MagickFalse,argv[i]);
01231             if (op < 0)
01232               ThrowConvertException(OptionError,"UnrecognizedDistortMethod",
01233                 argv[i]);
01234             i++;
01235             if (i == (long) (argc-1))
01236               ThrowConvertException(OptionError,"MissingArgument",option);
01237             break;
01238           }
01239         if (LocaleCompare("dither",option+1) == 0)
01240           {
01241             long
01242               method;
01243 
01244             if (*option == '+')
01245               break;
01246             i++;
01247             if (i == (long) argc)
01248               ThrowConvertException(OptionError,"MissingArgument",option);
01249             method=ParseMagickOption(MagickDitherOptions,MagickFalse,argv[i]);
01250             if (method < 0)
01251               ThrowConvertException(OptionError,"UnrecognizedDitherMethod",
01252                 argv[i]);
01253             break;
01254           }
01255         if (LocaleCompare("draw",option+1) == 0)
01256           {
01257             if (*option == '+')
01258               break;
01259             i++;
01260             if (i == (long) (argc-1))
01261               ThrowConvertException(OptionError,"MissingArgument",option);
01262             break;
01263           }
01264         if (LocaleCompare("duration",option+1) == 0)
01265           {
01266             if (*option == '+')
01267               break;
01268             i++;
01269             if (i == (long) (argc-1))
01270               ThrowConvertException(OptionError,"MissingArgument",option);
01271             if (IsGeometry(argv[i]) == MagickFalse)
01272               ThrowConvertInvalidArgumentException(option,argv[i]);
01273             break;
01274           }
01275         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01276       }
01277       case 'e':
01278       {
01279         if (LocaleCompare("edge",option+1) == 0)
01280           {
01281             if (*option == '+')
01282               break;
01283             i++;
01284             if (i == (long) (argc-1))
01285               ThrowConvertException(OptionError,"MissingArgument",option);
01286             if (IsGeometry(argv[i]) == MagickFalse)
01287               ThrowConvertInvalidArgumentException(option,argv[i]);
01288             break;
01289           }
01290         if (LocaleCompare("emboss",option+1) == 0)
01291           {
01292             if (*option == '+')
01293               break;
01294             i++;
01295             if (i == (long) (argc-1))
01296               ThrowConvertException(OptionError,"MissingArgument",option);
01297             if (IsGeometry(argv[i]) == MagickFalse)
01298               ThrowConvertInvalidArgumentException(option,argv[i]);
01299             break;
01300           }
01301         if (LocaleCompare("encipher",option+1) == 0)
01302           {
01303             if (*option == '+')
01304               break;
01305             i++;
01306             if (i == (long) (argc-1))
01307               ThrowConvertException(OptionError,"MissingArgument",option);
01308             break;
01309           }
01310         if (LocaleCompare("encoding",option+1) == 0)
01311           {
01312             if (*option == '+')
01313               break;
01314             i++;
01315             if (i == (long) (argc-1))
01316               ThrowConvertException(OptionError,"MissingArgument",option);
01317             break;
01318           }
01319         if (LocaleCompare("endian",option+1) == 0)
01320           {
01321             long
01322               endian;
01323 
01324             if (*option == '+')
01325               break;
01326             i++;
01327             if (i == (long) (argc-1))
01328               ThrowConvertException(OptionError,"MissingArgument",option);
01329             endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
01330               argv[i]);
01331             if (endian < 0)
01332               ThrowConvertException(OptionError,"UnrecognizedEndianType",
01333                 argv[i]);
01334             break;
01335           }
01336         if (LocaleCompare("enhance",option+1) == 0)
01337           break;
01338         if (LocaleCompare("equalize",option+1) == 0)
01339           break;
01340         if (LocaleCompare("evaluate",option+1) == 0)
01341           {
01342             long
01343               op;
01344 
01345             if (*option == '+')
01346               break;
01347             i++;
01348             if (i == (long) argc)
01349               ThrowConvertException(OptionError,"MissingArgument",option);
01350             op=ParseMagickOption(MagickEvaluateOptions,MagickFalse,argv[i]);
01351             if (op < 0)
01352               ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
01353                 argv[i]);
01354             i++;
01355             if (i == (long) (argc-1))
01356               ThrowConvertException(OptionError,"MissingArgument",option);
01357             if (IsGeometry(argv[i]) == MagickFalse)
01358               ThrowConvertInvalidArgumentException(option,argv[i]);
01359             break;
01360           }
01361         if (LocaleCompare("evaluate-sequence",option+1) == 0)
01362           {
01363             long
01364               op;
01365 
01366             if (*option == '+')
01367               break;
01368             i++;
01369             if (i == (long) argc)
01370               ThrowConvertException(OptionError,"MissingArgument",option);
01371             op=ParseMagickOption(MagickEvaluateOptions,MagickFalse,argv[i]);
01372             if (op < 0)
01373               ThrowConvertException(OptionError,"UnrecognizedEvaluateOperator",
01374                 argv[i]);
01375             break;
01376           }
01377         if (LocaleCompare("extent",option+1) == 0)
01378           {
01379             if (*option == '+')
01380               break;
01381             i++;
01382             if (i == (long) (argc-1))
01383               ThrowConvertException(OptionError,"MissingArgument",option);
01384             if (IsGeometry(argv[i]) == MagickFalse)
01385               ThrowConvertInvalidArgumentException(option,argv[i]);
01386             break;
01387           }
01388         if (LocaleCompare("extract",option+1) == 0)
01389           {
01390             if (*option == '+')
01391               break;
01392             i++;
01393             if (i == (long) (argc-1))
01394               ThrowConvertException(OptionError,"MissingArgument",option);
01395             if (IsGeometry(argv[i]) == MagickFalse)
01396               ThrowConvertInvalidArgumentException(option,argv[i]);
01397             break;
01398           }
01399         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01400       }
01401       case 'f':
01402       {
01403         if (LocaleCompare("family",option+1) == 0)
01404           {
01405             if (*option == '+')
01406               break;
01407             i++;
01408             if (i == (long) (argc-1))
01409               ThrowConvertException(OptionError,"MissingArgument",option);
01410             break;
01411           }
01412         if (LocaleCompare("fft",option+1) == 0)
01413           break;
01414         if (LocaleCompare("fill",option+1) == 0)
01415           {
01416             if (*option == '+')
01417               break;
01418             i++;
01419             if (i == (long) (argc-1))
01420               ThrowConvertException(OptionError,"MissingArgument",option);
01421             break;
01422           }
01423         if (LocaleCompare("filter",option+1) == 0)
01424           {
01425             long
01426               filter;
01427 
01428             if (*option == '+')
01429               break;
01430             i++;
01431             if (i == (long) (argc-1))
01432               ThrowConvertException(OptionError,"MissingArgument",option);
01433             filter=ParseMagickOption(MagickFilterOptions,MagickFalse,argv[i]);
01434             if (filter < 0)
01435               ThrowConvertException(OptionError,"UnrecognizedImageFilter",
01436                 argv[i]);
01437             break;
01438           }
01439         if (LocaleCompare("flatten",option+1) == 0)
01440           break;
01441         if (LocaleCompare("flip",option+1) == 0)
01442           break;
01443         if (LocaleCompare("flop",option+1) == 0)
01444           break;
01445         if (LocaleCompare("floodfill",option+1) == 0)
01446           {
01447             if (*option == '+')
01448               break;
01449             i++;
01450             if (i == (long) (argc-1))
01451               ThrowConvertException(OptionError,"MissingArgument",option);
01452             if (IsGeometry(argv[i]) == MagickFalse)
01453               ThrowConvertInvalidArgumentException(option,argv[i]);
01454             i++;
01455             if (i == (long) (argc-1))
01456               ThrowConvertException(OptionError,"MissingArgument",option);
01457             break;
01458           }
01459         if (LocaleCompare("font",option+1) == 0)
01460           {
01461             if (*option == '+')
01462               break;
01463             i++;
01464             if (i == (long) (argc-1))
01465               ThrowConvertException(OptionError,"MissingArgument",option);
01466             break;
01467           }
01468         if (LocaleCompare("format",option+1) == 0)
01469           {
01470             if (*option == '+')
01471               break;
01472             i++;
01473             if (i == (long) (argc-1))
01474               ThrowConvertException(OptionError,"MissingArgument",option);
01475             format=argv[i];
01476             break;
01477           }
01478         if (LocaleCompare("frame",option+1) == 0)
01479           {
01480             if (*option == '+')
01481               break;
01482             i++;
01483             if (i == (long) (argc-1))
01484               ThrowConvertException(OptionError,"MissingArgument",option);
01485             if (IsGeometry(argv[i]) == MagickFalse)
01486               ThrowConvertInvalidArgumentException(option,argv[i]);
01487             break;
01488           }
01489         if (LocaleCompare("function",option+1) == 0)
01490           {
01491             long
01492               op;
01493 
01494             if (*option == '+')
01495               break;
01496             i++;
01497             if (i == (long) argc)
01498               ThrowConvertException(OptionError,"MissingArgument",option);
01499             op=ParseMagickOption(MagickFunctionOptions,MagickFalse,argv[i]);
01500             if (op < 0)
01501               ThrowConvertException(OptionError,"UnrecognizedFunction",argv[i]);
01502              i++;
01503              if (i == (long) (argc-1))
01504                ThrowConvertException(OptionError,"MissingArgument",option);
01505             break;
01506           }
01507         if (LocaleCompare("fuzz",option+1) == 0)
01508           {
01509             if (*option == '+')
01510               break;
01511             i++;
01512             if (i == (long) (argc-1))
01513               ThrowConvertException(OptionError,"MissingArgument",option);
01514             if (IsGeometry(argv[i]) == MagickFalse)
01515               ThrowConvertInvalidArgumentException(option,argv[i]);
01516             break;
01517           }
01518         if (LocaleCompare("fx",option+1) == 0)
01519           {
01520             if (*option == '+')
01521               break;
01522             i++;
01523             if (i == (long) (argc-1))
01524               ThrowConvertException(OptionError,"MissingArgument",option);
01525             break;
01526           }
01527         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01528       }
01529       case 'g':
01530       {
01531         if (LocaleCompare("gamma",option+1) == 0)
01532           {
01533             i++;
01534             if (i == (long) (argc-1))
01535               ThrowConvertException(OptionError,"MissingArgument",option);
01536             if (IsGeometry(argv[i]) == MagickFalse)
01537               ThrowConvertInvalidArgumentException(option,argv[i]);
01538             break;
01539           }
01540         if ((LocaleCompare("gaussian-blur",option+1) == 0) ||
01541             (LocaleCompare("gaussian",option+1) == 0))
01542           {
01543             i++;
01544             if (i == (long) (argc-1))
01545               ThrowConvertException(OptionError,"MissingArgument",option);
01546             if (IsGeometry(argv[i]) == MagickFalse)
01547               ThrowConvertInvalidArgumentException(option,argv[i]);
01548             break;
01549           }
01550         if (LocaleCompare("geometry",option+1) == 0)
01551           {
01552             if (*option == '+')
01553               break;
01554             i++;
01555             if (i == (long) (argc-1))
01556               ThrowConvertException(OptionError,"MissingArgument",option);
01557             if (IsGeometry(argv[i]) == MagickFalse)
01558               ThrowConvertInvalidArgumentException(option,argv[i]);
01559             break;
01560           }
01561         if (LocaleCompare("gravity",option+1) == 0)
01562           {
01563             long
01564               gravity;
01565 
01566             if (*option == '+')
01567               break;
01568             i++;
01569             if (i == (long) (argc-1))
01570               ThrowConvertException(OptionError,"MissingArgument",option);
01571             gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,
01572               argv[i]);
01573             if (gravity < 0)
01574               ThrowConvertException(OptionError,"UnrecognizedGravityType",
01575                 argv[i]);
01576             break;
01577           }
01578         if (LocaleCompare("green-primary",option+1) == 0)
01579           {
01580             if (*option == '+')
01581               break;
01582             i++;
01583             if (i == (long) (argc-1))
01584               ThrowConvertException(OptionError,"MissingArgument",option);
01585             if (IsGeometry(argv[i]) == MagickFalse)
01586               ThrowConvertInvalidArgumentException(option,argv[i]);
01587             break;
01588           }
01589         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01590       }
01591       case 'h':
01592       {
01593         if (LocaleCompare("hald-clut",option+1) == 0)
01594           break;
01595         if ((LocaleCompare("help",option+1) == 0) ||
01596             (LocaleCompare("-help",option+1) == 0))
01597           return(ConvertUsage());
01598         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01599       }
01600       case 'i':
01601       {
01602         if (LocaleCompare("identify",option+1) == 0)
01603           break;
01604         if (LocaleCompare("ift",option+1) == 0)
01605           break;
01606         if (LocaleCompare("implode",option+1) == 0)
01607           {
01608             if (*option == '+')
01609               break;
01610             i++;
01611             if (i == (long) (argc-1))
01612               ThrowConvertException(OptionError,"MissingArgument",option);
01613             if (IsGeometry(argv[i]) == MagickFalse)
01614               ThrowConvertInvalidArgumentException(option,argv[i]);
01615             break;
01616           }
01617         if (LocaleCompare("insert",option+1) == 0)
01618           {
01619             if (*option == '+')
01620               break;
01621             i++;
01622             if (i == (long) (argc-1))
01623               ThrowConvertException(OptionError,"MissingArgument",option);
01624             if (IsGeometry(argv[i]) == MagickFalse)
01625               ThrowConvertInvalidArgumentException(option,argv[i]);
01626             break;
01627           }
01628         if (LocaleCompare("intent",option+1) == 0)
01629           {
01630             long
01631               intent;
01632 
01633             if (*option == '+')
01634               break;
01635             i++;
01636             if (i == (long) (argc-1))
01637               ThrowConvertException(OptionError,"MissingArgument",option);
01638             intent=ParseMagickOption(MagickIntentOptions,MagickFalse,
01639               argv[i]);
01640             if (intent < 0)
01641               ThrowConvertException(OptionError,"UnrecognizedIntentType",
01642                 argv[i]);
01643             break;
01644           }
01645         if (LocaleCompare("interlace",option+1) == 0)
01646           {
01647             long
01648               interlace;
01649 
01650             if (*option == '+')
01651               break;
01652             i++;
01653             if (i == (long) (argc-1))
01654               ThrowConvertException(OptionError,"MissingArgument",option);
01655             interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
01656               argv[i]);
01657             if (interlace < 0)
01658               ThrowConvertException(OptionError,"UnrecognizedInterlaceType",
01659                 argv[i]);
01660             break;
01661           }
01662         if (LocaleCompare("interline-spacing",option+1) == 0)
01663           {
01664             if (*option == '+')
01665               break;
01666             i++;
01667             if (i == (long) (argc-1))
01668               ThrowConvertException(OptionError,"MissingArgument",option);
01669             if (IsGeometry(argv[i]) == MagickFalse)
01670               ThrowConvertInvalidArgumentException(option,argv[i]);
01671             break;
01672           }
01673         if (LocaleCompare("interpolate",option+1) == 0)
01674           {
01675             long
01676               interpolate;
01677 
01678             if (*option == '+')
01679               break;
01680             i++;
01681             if (i == (long) argc)
01682               ThrowConvertException(OptionError,"MissingArgument",option);
01683             interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
01684               argv[i]);
01685             if (interpolate < 0)
01686               ThrowConvertException(OptionError,"UnrecognizedInterpolateMethod",
01687                 argv[i]);
01688             break;
01689           }
01690         if (LocaleCompare("interword-spacing",option+1) == 0)
01691           {
01692             if (*option == '+')
01693               break;
01694             i++;
01695             if (i == (long) (argc-1))
01696               ThrowConvertException(OptionError,"MissingArgument",option);
01697             if (IsGeometry(argv[i]) == MagickFalse)
01698               ThrowConvertInvalidArgumentException(option,argv[i]);
01699             break;
01700           }
01701         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01702       }
01703       case 'k':
01704       {
01705         if (LocaleCompare("kerning",option+1) == 0)
01706           {
01707             if (*option == '+')
01708               break;
01709             i++;
01710             if (i == (long) (argc-1))
01711               ThrowConvertException(OptionError,"MissingArgument",option);
01712             if (IsGeometry(argv[i]) == MagickFalse)
01713               ThrowConvertInvalidArgumentException(option,argv[i]);
01714             break;
01715           }
01716         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01717       }
01718       case 'l':
01719       {
01720         if (LocaleCompare("label",option+1) == 0)
01721           {
01722             if (*option == '+')
01723               break;
01724             i++;
01725             if (i == (long) argc)
01726               ThrowConvertException(OptionError,"MissingArgument",option);
01727             break;
01728           }
01729         if (LocaleCompare("lat",option+1) == 0)
01730           {
01731             if (*option == '+')
01732               break;
01733             i++;
01734             if (i == (long) (argc-1))
01735               ThrowConvertException(OptionError,"MissingArgument",option);
01736             if (IsGeometry(argv[i]) == MagickFalse)
01737               ThrowConvertInvalidArgumentException(option,argv[i]);
01738             break;
01739           }
01740         if (LocaleCompare("layers",option+1) == 0)
01741           {
01742             long
01743               type;
01744 
01745             if (*option == '+')
01746               break;
01747             i++;
01748             if (i == (long) (argc-1))
01749               ThrowConvertException(OptionError,"MissingArgument",option);
01750             type=ParseMagickOption(MagickLayerOptions,MagickFalse,argv[i]);
01751             if (type < 0)
01752               ThrowConvertException(OptionError,"UnrecognizedLayerMethod",
01753                 argv[i]);
01754             break;
01755           }
01756         if (LocaleCompare("level",option+1) == 0)
01757           {
01758             i++;
01759             if (i == (long) (argc-1))
01760               ThrowConvertException(OptionError,"MissingArgument",option);
01761             if (IsGeometry(argv[i]) == MagickFalse)
01762               ThrowConvertInvalidArgumentException(option,argv[i]);
01763             break;
01764           }
01765         if (LocaleCompare("level-colors",option+1) == 0)
01766           {
01767             i++;
01768             if (i == (long) (argc-1))
01769               ThrowConvertException(OptionError,"MissingArgument",option);
01770             break;
01771           }
01772         if (LocaleCompare("linewidth",option+1) == 0)
01773           {
01774             if (*option == '+')
01775               break;
01776             i++;
01777             if (i == (long) (argc-1))
01778               ThrowConvertException(OptionError,"MissingArgument",option);
01779             if (IsGeometry(argv[i]) == MagickFalse)
01780               ThrowConvertInvalidArgumentException(option,argv[i]);
01781             break;
01782           }
01783         if (LocaleCompare("liquid-rescale",option+1) == 0)
01784           {
01785             i++;
01786             if (i == (long) (argc-1))
01787               ThrowConvertException(OptionError,"MissingArgument",option);
01788             if (IsGeometry(argv[i]) == MagickFalse)
01789               ThrowConvertInvalidArgumentException(option,argv[i]);
01790             break;
01791           }
01792         if (LocaleCompare("limit",option+1) == 0)
01793           {
01794             char
01795               *p;
01796 
01797             double
01798               value;
01799 
01800             long
01801               resource;
01802 
01803             if (*option == '+')
01804               break;
01805             i++;
01806             if (i == (long) argc)
01807               ThrowConvertException(OptionError,"MissingArgument",option);
01808             resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
01809               argv[i]);
01810             if (resource < 0)
01811               ThrowConvertException(OptionError,"UnrecognizedResourceType",
01812                 argv[i]);
01813             i++;
01814             if (i == (long) argc)
01815               ThrowConvertException(OptionError,"MissingArgument",option);
01816             value=strtod(argv[i],&p);
01817             if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
01818               ThrowConvertInvalidArgumentException(option,argv[i]);
01819             break;
01820           }
01821         if (LocaleCompare("linear-stretch",option+1) == 0)
01822           {
01823             i++;
01824             if (i == (long) (argc-1))
01825               ThrowConvertException(OptionError,"MissingArgument",option);
01826             if (IsGeometry(argv[i]) == MagickFalse)
01827               ThrowConvertInvalidArgumentException(option,argv[i]);
01828             break;
01829           }
01830         if (LocaleCompare("list",option+1) == 0)
01831           {
01832             long
01833               list;
01834 
01835             if (*option == '+')
01836               break;
01837             i++;
01838             if (i == (long) argc)
01839               ThrowConvertException(OptionError,"MissingArgument",option);
01840             list=ParseMagickOption(MagickListOptions,MagickFalse,argv[i]);
01841             if (list < 0)
01842               ThrowConvertException(OptionError,"UnrecognizedListType",argv[i]);
01843             (void) MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
01844               argv+j,exception);
01845             DestroyConvert();
01846             return(MagickTrue);
01847           }
01848         if (LocaleCompare("log",option+1) == 0)
01849           {
01850             if (*option == '+')
01851               break;
01852             i++;
01853             if ((i == (long) argc) ||
01854                 (strchr(argv[i],'%') == (char *) NULL))
01855               ThrowConvertException(OptionError,"MissingArgument",option);
01856             break;
01857           }
01858         if (LocaleCompare("loop",option+1) == 0)
01859           {
01860             if (*option == '+')
01861               break;
01862             i++;
01863             if (i == (long) (argc-1))
01864               ThrowConvertException(OptionError,"MissingArgument",option);
01865             if (IsGeometry(argv[i]) == MagickFalse)
01866               ThrowConvertInvalidArgumentException(option,argv[i]);
01867             break;
01868           }
01869         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01870       }
01871       case 'm':
01872       {
01873         if (LocaleCompare("map",option+1) == 0)
01874           {
01875             if (*option == '+')
01876               break;
01877             i++;
01878             if (i == (long) (argc-1))
01879               ThrowConvertException(OptionError,"MissingArgument",option);
01880             break;
01881           }
01882         if (LocaleCompare("mask",option+1) == 0)
01883           {
01884             if (*option == '+')
01885               break;
01886             i++;
01887             if (i == (long) (argc-1))
01888               ThrowConvertException(OptionError,"MissingArgument",option);
01889             break;
01890           }
01891         if (LocaleCompare("matte",option+1) == 0)
01892           break;
01893         if (LocaleCompare("mattecolor",option+1) == 0)
01894           {
01895             if (*option == '+')
01896               break;
01897             i++;
01898             if (i == (long) (argc-1))
01899               ThrowConvertException(OptionError,"MissingArgument",option);
01900             break;
01901           }
01902         if (LocaleCompare("maximum",option+1) == 0)
01903           break;
01904         if (LocaleCompare("median",option+1) == 0)
01905           {
01906             if (*option == '+')
01907               break;
01908             i++;
01909             if (i == (long) (argc-1))
01910               ThrowConvertException(OptionError,"MissingArgument",option);
01911             if (IsGeometry(argv[i]) == MagickFalse)
01912               ThrowConvertInvalidArgumentException(option,argv[i]);
01913             break;
01914           }
01915         if (LocaleCompare("minimum",option+1) == 0)
01916           break;
01917         if (LocaleCompare("modulate",option+1) == 0)
01918           {
01919             if (*option == '+')
01920               break;
01921             i++;
01922             if (i == (long) (argc-1))
01923               ThrowConvertException(OptionError,"MissingArgument",option);
01924             if (IsGeometry(argv[i]) == MagickFalse)
01925               ThrowConvertInvalidArgumentException(option,argv[i]);
01926             break;
01927           }
01928         if (LocaleCompare("monitor",option+1) == 0)
01929           break;
01930         if (LocaleCompare("monochrome",option+1) == 0)
01931           break;
01932         if (LocaleCompare("morph",option+1) == 0)
01933           {
01934             if (*option == '+')
01935               break;
01936             i++;
01937             if (i == (long) (argc-1))
01938               ThrowConvertException(OptionError,"MissingArgument",option);
01939             if (IsGeometry(argv[i]) == MagickFalse)
01940               ThrowConvertInvalidArgumentException(option,argv[i]);
01941             break;
01942           }
01943         if (LocaleCompare("morphology",option+1) == 0)
01944           {
01945             long
01946               op;
01947 
01948             char
01949               token[MaxTextExtent];
01950 
01951             i++;
01952             if (i == (long) argc)
01953               ThrowConvertException(OptionError,"MissingArgument",option);
01954             GetMagickToken(argv[i],NULL,token);
01955             op=ParseMagickOption(MagickMorphologyOptions,MagickFalse,token);
01956             if (op < 0)
01957               ThrowConvertException(OptionError,"UnrecognizedMorphologyMethod",
01958                   token);
01959             i++;
01960             if (i == (long) (argc-1))
01961               ThrowConvertException(OptionError,"MissingArgument",option);
01962             GetMagickToken(argv[i],NULL,token);
01963             if ( isalpha((int)token[0]) )
01964               {
01965                 op=ParseMagickOption(MagickKernelOptions,MagickFalse,token);
01966                 if (op < 0)
01967                   ThrowConvertException(OptionError,"UnrecognizedKernelType",
01968                        token);
01969               }
01970 #if 0
01971   /* DO NOT ENABLE, geometry can not handle user defined kernels
01972    * which include 'nan' values, though '-' are acceptable.
01973    */
01974             else if (IsGeometry(argv[i]) == MagickFalse)
01975               ThrowConvertInvalidArgumentException(option,argv[i]);
01976 #endif
01977             break;
01978           }
01979         if (LocaleCompare("mosaic",option+1) == 0)
01980           break;
01981         if (LocaleCompare("motion-blur",option+1) == 0)
01982           {
01983             if (*option == '+')
01984               break;
01985             i++;
01986             if (i == (long) (argc-1))
01987               ThrowConvertException(OptionError,"MissingArgument",option);
01988             if (IsGeometry(argv[i]) == MagickFalse)
01989               ThrowConvertInvalidArgumentException(option,argv[i]);
01990             break;
01991           }
01992         ThrowConvertException(OptionError,"UnrecognizedOption",option)
01993       }
01994       case 'n':
01995       {
01996         if (LocaleCompare("negate",option+1) == 0)
01997           break;
01998         if (LocaleCompare("noise",option+1) == 0)
01999           {
02000             i++;
02001             if (i == (long) (argc-1))
02002               ThrowConvertException(OptionError,"MissingArgument",option);
02003             if (*option == '+')
02004               {
02005                 long
02006                   noise;
02007 
02008                 noise=ParseMagickOption(MagickNoiseOptions,MagickFalse,argv[i]);
02009                 if (noise < 0)
02010                   ThrowConvertException(OptionError,"UnrecognizedNoiseType",
02011                     argv[i]);
02012                 break;
02013               }
02014             if (IsGeometry(argv[i]) == MagickFalse)
02015               ThrowConvertInvalidArgumentException(option,argv[i]);
02016             break;
02017           }
02018         if (LocaleCompare("noop",option+1) == 0)
02019           break;
02020         if (LocaleCompare("normalize",option+1) == 0)
02021           break;
02022         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02023       }
02024       case 'o':
02025       {
02026         if (LocaleCompare("opaque",option+1) == 0)
02027           {
02028             i++;
02029             if (i == (long) (argc-1))
02030               ThrowConvertException(OptionError,"MissingArgument",option);
02031             break;
02032           }
02033         if (LocaleCompare("ordered-dither",option+1) == 0)
02034           {
02035             if (*option == '+')
02036               break;
02037             i++;
02038             if (i == (long) (argc-1))
02039               ThrowConvertException(OptionError,"MissingArgument",option);
02040             break;
02041           }
02042         if (LocaleCompare("orient",option+1) == 0)
02043           {
02044             long
02045               orientation;
02046 
02047             if (*option == '+')
02048               break;
02049             i++;
02050             if (i == (long) (argc-1))
02051               ThrowConvertException(OptionError,"MissingArgument",option);
02052             orientation=ParseMagickOption(MagickOrientationOptions,
02053               MagickFalse,argv[i]);
02054             if (orientation < 0)
02055               ThrowConvertException(OptionError,"UnrecognizedImageOrientation",
02056                 argv[i]);
02057             break;
02058           }
02059         ThrowConvertException(OptionError,"UnrecognizedOption",argv[i])
02060       }
02061       case 'p':
02062       {
02063         if (LocaleCompare("page",option+1) == 0)
02064           {
02065             if (*option == '+')
02066               break;
02067             i++;
02068             if (i == (long) argc)
02069               ThrowConvertException(OptionError,"MissingArgument",option);
02070             break;
02071           }
02072         if (LocaleCompare("paint",option+1) == 0)
02073           {
02074             if (*option == '+')
02075               break;
02076             i++;
02077             if (i == (long) (argc-1))
02078               ThrowConvertException(OptionError,"MissingArgument",option);
02079             if (IsGeometry(argv[i]) == MagickFalse)
02080               ThrowConvertInvalidArgumentException(option,argv[i]);
02081             break;
02082           }
02083         if (LocaleCompare("ping",option+1) == 0)
02084           break;
02085         if (LocaleCompare("pointsize",option+1) == 0)
02086           {
02087             if (*option == '+')
02088               break;
02089             i++;
02090             if (i == (long) (argc-1))
02091               ThrowConvertException(OptionError,"MissingArgument",option);
02092             if (IsGeometry(argv[i]) == MagickFalse)
02093               ThrowConvertInvalidArgumentException(option,argv[i]);
02094             break;
02095           }
02096         if (LocaleCompare("polaroid",option+1) == 0)
02097           {
02098             if (*option == '+')
02099               break;
02100             i++;
02101             if (i == (long) (argc-1))
02102               ThrowConvertException(OptionError,"MissingArgument",option);
02103             if (IsGeometry(argv[i]) == MagickFalse)
02104               ThrowConvertInvalidArgumentException(option,argv[i]);
02105             break;
02106           }
02107         if (LocaleCompare("posterize",option+1) == 0)
02108           {
02109             if (*option == '+')
02110               break;
02111             i++;
02112             if (i == (long) (argc-1))
02113               ThrowConvertException(OptionError,"MissingArgument",option);
02114             if (IsGeometry(argv[i]) == MagickFalse)
02115               ThrowConvertInvalidArgumentException(option,argv[i]);
02116             break;
02117           }
02118         if (LocaleCompare("precision",option+1) == 0)
02119           {
02120             if (*option == '+')
02121               break;
02122             i++;
02123             if (i == (long) (argc-1))
02124               ThrowConvertException(OptionError,"MissingArgument",option);
02125             if (IsGeometry(argv[i]) == MagickFalse)
02126               ThrowConvertInvalidArgumentException(option,argv[i]);
02127             break;
02128           }
02129         if (LocaleCompare("preview",option+1) == 0)
02130           {
02131             long
02132               preview;
02133 
02134             if (*option == '+')
02135               break;
02136             i++;
02137             if (i == (long) (argc-1))
02138               ThrowConvertException(OptionError,"MissingArgument",option);
02139             preview=ParseMagickOption(MagickPreviewOptions,MagickFalse,
02140               argv[i]);
02141             if (preview < 0)
02142               ThrowConvertException(OptionError,"UnrecognizedPreviewType",
02143                 argv[i]);
02144             break;
02145           }
02146         if (LocaleCompare("print",option+1) == 0)
02147           {
02148             if (*option == '+')
02149               break;
02150             i++;
02151             if (i == (long) (argc-1))
02152               ThrowConvertException(OptionError,"MissingArgument",option);
02153             break;
02154           }
02155         if (LocaleCompare("process",option+1) == 0)
02156           {
02157             if (*option == '+')
02158               break;
02159             i++;
02160             if (i == (long) (argc-1))
02161               ThrowConvertException(OptionError,"MissingArgument",option);
02162             break;
02163           }
02164         if (LocaleCompare("profile",option+1) == 0)
02165           {
02166             i++;
02167             if (i == (long) (argc-1))
02168               ThrowConvertException(OptionError,"MissingArgument",option);
02169             break;
02170           }
02171         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02172       }
02173       case 'q':
02174       {
02175         if (LocaleCompare("quality",option+1) == 0)
02176           {
02177             if (*option == '+')
02178               break;
02179             i++;
02180             if (i == (long) (argc-1))
02181               ThrowConvertException(OptionError,"MissingArgument",option);
02182             if (IsGeometry(argv[i]) == MagickFalse)
02183               ThrowConvertInvalidArgumentException(option,argv[i]);
02184             break;
02185           }
02186         if (LocaleCompare("quantize",option+1) == 0)
02187           {
02188             long
02189               colorspace;
02190 
02191             if (*option == '+')
02192               break;
02193             i++;
02194             if (i == (long) (argc-1))
02195               ThrowConvertException(OptionError,"MissingArgument",option);
02196             colorspace=ParseMagickOption(MagickColorspaceOptions,
02197               MagickFalse,argv[i]);
02198             if (colorspace < 0)
02199               ThrowConvertException(OptionError,"UnrecognizedColorspace",
02200                 argv[i]);
02201             break;
02202           }
02203         if (LocaleCompare("quiet",option+1) == 0)
02204           break;
02205         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02206       }
02207       case 'r':
02208       {
02209         if (LocaleCompare("radial-blur",option+1) == 0)
02210           {
02211             i++;
02212             if (i == (long) (argc-1))
02213               ThrowConvertException(OptionError,"MissingArgument",option);
02214             if (IsGeometry(argv[i]) == MagickFalse)
02215               ThrowConvertInvalidArgumentException(option,argv[i]);
02216             break;
02217           }
02218         if (LocaleCompare("raise",option+1) == 0)
02219           {
02220             i++;
02221             if (i == (long) (argc-1))
02222               ThrowConvertException(OptionError,"MissingArgument",option);
02223             if (IsGeometry(argv[i]) == MagickFalse)
02224               ThrowConvertInvalidArgumentException(option,argv[i]);
02225             break;
02226           }
02227         if (LocaleCompare("random-threshold",option+1) == 0)
02228           {
02229             if (*option == '+')
02230               break;
02231             i++;
02232             if (i == (long) (argc-1))
02233               ThrowConvertException(OptionError,"MissingArgument",option);
02234             if (IsGeometry(argv[i]) == MagickFalse)
02235               ThrowConvertInvalidArgumentException(option,argv[i]);
02236             break;
02237           }
02238         if (LocaleCompare("recolor",option+1) == 0)
02239           {
02240             if (*option == '+')
02241               break;
02242             i++;
02243             if (i == (long) (argc-1))
02244               ThrowConvertException(OptionError,"MissingArgument",option);
02245             if (IsGeometry(argv[i]) == MagickFalse)
02246               ThrowConvertInvalidArgumentException(option,argv[i]);
02247             break;
02248           }
02249         if (LocaleCompare("red-primary",option+1) == 0)
02250           {
02251             if (*option == '+')
02252               break;
02253             i++;
02254             if (i == (long) (argc-1))
02255               ThrowConvertException(OptionError,"MissingArgument",option);
02256             if (IsGeometry(argv[i]) == MagickFalse)
02257               ThrowConvertInvalidArgumentException(option,argv[i]);
02258             break;
02259           }
02260         if (LocaleCompare("regard-warnings",option+1) == 0)
02261           break;
02262         if (LocaleCompare("region",option+1) == 0)
02263           {
02264             if (*option == '+')
02265               break;
02266             i++;
02267             if (i == (long) (argc-1))
02268               ThrowConvertException(OptionError,"MissingArgument",option);
02269             if (IsGeometry(argv[i]) == MagickFalse)
02270               ThrowConvertInvalidArgumentException(option,argv[i]);
02271             break;
02272           }
02273         if (LocaleCompare("remap",option+1) == 0)
02274           {
02275             if (*option == '+')
02276               break;
02277             i++;
02278             if (i == (long) (argc-1))
02279               ThrowConvertException(OptionError,"MissingArgument",option);
02280             break;
02281           }
02282         if (LocaleCompare("render",option+1) == 0)
02283           break;
02284         if (LocaleCompare("repage",option+1) == 0)
02285           {
02286             if (*option == '+')
02287               break;
02288             i++;
02289             if (i == (long) (argc-1))
02290               ThrowConvertException(OptionError,"MissingArgument",option);
02291             if (IsGeometry(argv[i]) == MagickFalse)
02292               ThrowConvertInvalidArgumentException(option,argv[i]);
02293             break;
02294           }
02295         if (LocaleCompare("resample",option+1) == 0)
02296           {
02297             if (*option == '+')
02298               break;
02299             i++;
02300             if (i == (long) (argc-1))
02301               ThrowConvertException(OptionError,"MissingArgument",option);
02302             if (IsGeometry(argv[i]) == MagickFalse)
02303               ThrowConvertInvalidArgumentException(option,argv[i]);
02304             break;
02305           }
02306         if (LocaleCompare("resize",option+1) == 0)
02307           {
02308             if (*option == '+')
02309               break;
02310             i++;
02311             if (i == (long) (argc-1))
02312               ThrowConvertException(OptionError,"MissingArgument",option);
02313             if (IsGeometry(argv[i]) == MagickFalse)
02314               ThrowConvertInvalidArgumentException(option,argv[i]);
02315             break;
02316           }
02317         if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
02318           {
02319             respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
02320             break;
02321           }
02322         if (LocaleCompare("reverse",option+1) == 0)
02323           break;
02324         if (LocaleCompare("roll",option+1) == 0)
02325           {
02326             if (*option == '+')
02327               break;
02328             i++;
02329             if (i == (long) (argc-1))
02330               ThrowConvertException(OptionError,"MissingArgument",option);
02331             if (IsGeometry(argv[i]) == MagickFalse)
02332               ThrowConvertInvalidArgumentException(option,argv[i]);
02333             break;
02334           }
02335         if (LocaleCompare("rotate",option+1) == 0)
02336           {
02337             i++;
02338             if (i == (long) (argc-1))
02339               ThrowConvertException(OptionError,"MissingArgument",option);
02340             if (IsGeometry(argv[i]) == MagickFalse)
02341               ThrowConvertInvalidArgumentException(option,argv[i]);
02342             break;
02343           }
02344         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02345       }
02346       case 's':
02347       {
02348         if (LocaleCompare("sample",option+1) == 0)
02349           {
02350             if (*option == '+')
02351               break;
02352             i++;
02353             if (i == (long) (argc-1))
02354               ThrowConvertException(OptionError,"MissingArgument",option);
02355             if (IsGeometry(argv[i]) == MagickFalse)
02356               ThrowConvertInvalidArgumentException(option,argv[i]);
02357             break;
02358           }
02359         if (LocaleCompare("sampling-factor",option+1) == 0)
02360           {
02361             if (*option == '+')
02362               break;
02363             i++;
02364             if (i == (long) (argc-1))
02365               ThrowConvertException(OptionError,"MissingArgument",option);
02366             if (IsGeometry(argv[i]) == MagickFalse)
02367               ThrowConvertInvalidArgumentException(option,argv[i]);
02368             break;
02369           }
02370         if (LocaleCompare("scale",option+1) == 0)
02371           {
02372             if (*option == '+')
02373               break;
02374             i++;
02375             if (i == (long) (argc-1))
02376               ThrowConvertException(OptionError,"MissingArgument",option);
02377             if (IsGeometry(argv[i]) == MagickFalse)
02378               ThrowConvertInvalidArgumentException(option,argv[i]);
02379             break;
02380           }
02381         if (LocaleCompare("scene",option+1) == 0)
02382           {
02383             if (*option == '+')
02384               break;
02385             i++;
02386             if (i == (long) (argc-1))
02387               ThrowConvertException(OptionError,"MissingArgument",option);
02388             if (IsGeometry(argv[i]) == MagickFalse)
02389               ThrowConvertInvalidArgumentException(option,argv[i]);
02390             break;
02391           }
02392         if (LocaleCompare("seed",option+1) == 0)
02393           {
02394             if (*option == '+')
02395               break;
02396             i++;
02397             if (i == (long) (argc-1))
02398               ThrowConvertException(OptionError,"MissingArgument",option);
02399             if (IsGeometry(argv[i]) == MagickFalse)
02400               ThrowConvertInvalidArgumentException(option,argv[i]);
02401             break;
02402           }
02403         if (LocaleCompare("segment",option+1) == 0)
02404           {
02405             if (*option == '+')
02406               break;
02407             i++;
02408             if (i == (long) (argc-1))
02409               ThrowConvertException(OptionError,"MissingArgument",option);
02410             if (IsGeometry(argv[i]) == MagickFalse)
02411               ThrowConvertInvalidArgumentException(option,argv[i]);
02412             break;
02413           }
02414         if (LocaleCompare("selective-blur",option+1) == 0)
02415           {
02416             i++;
02417             if (i == (long) (argc-1))
02418               ThrowConvertException(OptionError,"MissingArgument",option);
02419             if (IsGeometry(argv[i]) == MagickFalse)
02420               ThrowConvertInvalidArgumentException(option,argv[i]);
02421             break;
02422           }
02423         if (LocaleCompare("separate",option+1) == 0)
02424           break;
02425         if (LocaleCompare("sepia-tone",option+1) == 0)
02426           {
02427             if (*option == '+')
02428               break;
02429             i++;
02430             if (i == (long) (argc-1))
02431               ThrowConvertException(OptionError,"MissingArgument",option);
02432             if (IsGeometry(argv[i]) == MagickFalse)
02433               ThrowConvertInvalidArgumentException(option,argv[i]);
02434             break;
02435           }
02436         if (LocaleCompare("set",option+1) == 0)
02437           {
02438             i++;
02439             if (i == (long) argc)
02440               ThrowConvertException(OptionError,"MissingArgument",option);
02441             if (*option == '+')
02442               break;
02443             i++;
02444             if (i == (long) argc)
02445               ThrowConvertException(OptionError,"MissingArgument",option);
02446             break;
02447           }
02448         if (LocaleCompare("shade",option+1) == 0)
02449           {
02450             i++;
02451             if (i == (long) (argc-1))
02452               ThrowConvertException(OptionError,"MissingArgument",option);
02453             if (IsGeometry(argv[i]) == MagickFalse)
02454               ThrowConvertInvalidArgumentException(option,argv[i]);
02455             break;
02456           }
02457         if (LocaleCompare("shadow",option+1) == 0)
02458           {
02459             if (*option == '+')
02460               break;
02461             i++;
02462             if (i == (long) (argc-1))
02463               ThrowConvertException(OptionError,"MissingArgument",option);
02464             if (IsGeometry(argv[i]) == MagickFalse)
02465               ThrowConvertInvalidArgumentException(option,argv[i]);
02466             break;
02467           }
02468         if (LocaleCompare("sharpen",option+1) == 0)
02469           {
02470             i++;
02471             if (i == (long) (argc-1))
02472               ThrowConvertException(OptionError,"MissingArgument",option);
02473             if (IsGeometry(argv[i]) == MagickFalse)
02474               ThrowConvertInvalidArgumentException(option,argv[i]);
02475             break;
02476           }
02477         if (LocaleCompare("shave",option+1) == 0)
02478           {
02479             if (*option == '+')
02480               break;
02481             i++;
02482             if (i == (long) (argc-1))
02483               ThrowConvertException(OptionError,"MissingArgument",option);
02484             if (IsGeometry(argv[i]) == MagickFalse)
02485               ThrowConvertInvalidArgumentException(option,argv[i]);
02486             break;
02487           }
02488         if (LocaleCompare("shear",option+1) == 0)
02489           {
02490             i++;
02491             if (i == (long) (argc-1))
02492               ThrowConvertException(OptionError,"MissingArgument",option);
02493             if (IsGeometry(argv[i]) == MagickFalse)
02494               ThrowConvertInvalidArgumentException(option,argv[i]);
02495             break;
02496           }
02497         if (LocaleCompare("sigmoidal-contrast",option+1) == 0)
02498           {
02499             i++;
02500             if (i == (long) (argc-1))
02501               ThrowConvertException(OptionError,"MissingArgument",option);
02502             if (IsGeometry(argv[i]) == MagickFalse)
02503               ThrowConvertInvalidArgumentException(option,argv[i]);
02504             break;
02505           }
02506         if (LocaleCompare("size",option+1) == 0)
02507           {
02508             if (*option == '+')
02509               break;
02510             i++;
02511             if (i == (long) (argc-1))
02512               ThrowConvertException(OptionError,"MissingArgument",option);
02513             if (IsGeometry(argv[i]) == MagickFalse)
02514               ThrowConvertInvalidArgumentException(option,argv[i]);
02515             break;
02516           }
02517         if (LocaleCompare("sketch",option+1) == 0)
02518           {
02519             if (*option == '+')
02520               break;
02521             i++;
02522             if (i == (long) (argc-1))
02523               ThrowConvertException(OptionError,"MissingArgument",option);
02524             if (IsGeometry(argv[i]) == MagickFalse)
02525               ThrowConvertInvalidArgumentException(option,argv[i]);
02526             break;
02527           }
02528         if (LocaleCompare("solarize",option+1) == 0)
02529           {
02530             if (*option == '+')
02531               break;
02532             i++;
02533             if (i == (long) (argc-1))
02534               ThrowConvertException(OptionError,"MissingArgument",option);
02535             if (IsGeometry(argv[i]) == MagickFalse)
02536               ThrowConvertInvalidArgumentException(option,argv[i]);
02537             break;
02538           }
02539         if (LocaleCompare("sparse-color",option+1) == 0)
02540           {
02541             long
02542               op;
02543 
02544             i++;
02545             if (i == (long) argc)
02546               ThrowConvertException(OptionError,"MissingArgument",option);
02547             op=ParseMagickOption(MagickSparseColorOptions,MagickFalse,argv[i]);
02548             if (op < 0)
02549               ThrowConvertException(OptionError,"UnrecognizedSparseColorMethod",
02550                 argv[i]);
02551             i++;
02552             if (i == (long) (argc-1))
02553               ThrowConvertException(OptionError,"MissingArgument",option);
02554             break;
02555           }
02556         if (LocaleCompare("splice",option+1) == 0)
02557           {
02558             if (*option == '+')
02559               break;
02560             i++;
02561             if (i == (long) (argc-1))
02562               ThrowConvertException(OptionError,"MissingArgument",option);
02563             if (IsGeometry(argv[i]) == MagickFalse)
02564               ThrowConvertInvalidArgumentException(option,argv[i]);
02565             break;
02566           }
02567         if (LocaleCompare("spread",option+1) == 0)
02568           {
02569             if (*option == '+')
02570               break;
02571             i++;
02572             if ((i == (long) (argc-1)) ||
02573                 (IsGeometry(argv[i]) == MagickFalse))
02574               ThrowConvertException(OptionError,"MissingArgument",option);
02575             break;
02576           }
02577         if (LocaleCompare("stretch",option+1) == 0)
02578           {
02579             long
02580               stretch;
02581 
02582             if (*option == '+')
02583               break;
02584             i++;
02585             if (i == (long) (argc-1))
02586               ThrowConvertException(OptionError,"MissingArgument",option);
02587             stretch=ParseMagickOption(MagickStretchOptions,MagickFalse,
02588               argv[i]);
02589             if (stretch < 0)
02590               ThrowConvertException(OptionError,"UnrecognizedStyleType",
02591                 argv[i]);
02592             break;
02593           }
02594         if (LocaleCompare("strip",option+1) == 0)
02595           break;
02596         if (LocaleCompare("stroke",option+1) == 0)
02597           {
02598             if (*option == '+')
02599               break;
02600             i++;
02601             if (i == (long) (argc-1))
02602               ThrowConvertException(OptionError,"MissingArgument",option);
02603             break;
02604           }
02605         if (LocaleCompare("strokewidth",option+1) == 0)
02606           {
02607             if (*option == '+')
02608               break;
02609             i++;
02610             if (i == (long) (argc-1))
02611               ThrowConvertException(OptionError,"MissingArgument",option);
02612             if (IsGeometry(argv[i]) == MagickFalse)
02613               ThrowConvertInvalidArgumentException(option,argv[i]);
02614             break;
02615           }
02616         if (LocaleCompare("style",option+1) == 0)
02617           {
02618             long
02619               style;
02620 
02621             if (*option == '+')
02622               break;
02623             i++;
02624             if (i == (long) (argc-1))
02625               ThrowConvertException(OptionError,"MissingArgument",option);
02626             style=ParseMagickOption(MagickStyleOptions,MagickFalse,argv[i]);
02627             if (style < 0)
02628               ThrowConvertException(OptionError,"UnrecognizedStyleType",
02629                 argv[i]);
02630             break;
02631           }
02632         if (LocaleCompare("support",option+1) == 0)
02633           {
02634             i++;  /* deprecated */
02635             break;
02636           }
02637         if (LocaleCompare("swap",option+1) == 0)
02638           {
02639             if (*option == '+')
02640               break;
02641             i++;
02642             if (i == (long) (argc-1))
02643               ThrowConvertException(OptionError,"MissingArgument",option);
02644             if (IsGeometry(argv[i]) == MagickFalse)
02645               ThrowConvertInvalidArgumentException(option,argv[i]);
02646             break;
02647           }
02648         if (LocaleCompare("swirl",option+1) == 0)
02649           {
02650             if (*option == '+')
02651               break;
02652             i++;
02653             if (i == (long) (argc-1))
02654               ThrowConvertException(OptionError,"MissingArgument",option);
02655             if (IsGeometry(argv[i]) == MagickFalse)
02656               ThrowConvertInvalidArgumentException(option,argv[i]);
02657             break;
02658           }
02659         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02660       }
02661       case 't':
02662       {
02663         if (LocaleCompare("taint",option+1) == 0)
02664           break;
02665         if (LocaleCompare("texture",option+1) == 0)
02666           {
02667             if (*option == '+')
02668               break;
02669             i++;
02670             if (i == (long) (argc-1))
02671               ThrowConvertException(OptionError,"MissingArgument",option);
02672             break;
02673           }
02674         if (LocaleCompare("thumbnail",option+1) == 0)
02675           {
02676             if (*option == '+')
02677               break;
02678             i++;
02679             if (i == (long) (argc-1))
02680               ThrowConvertException(OptionError,"MissingArgument",option);
02681             if (IsGeometry(argv[i]) == MagickFalse)
02682               ThrowConvertInvalidArgumentException(option,argv[i]);
02683             break;
02684           }
02685         if (LocaleCompare("threshold",option+1) == 0)
02686           {
02687             if (*option == '+')
02688               break;
02689             i++;
02690             if (i == (long) (argc-1))
02691               ThrowConvertException(OptionError,"MissingArgument",option);
02692             if (IsGeometry(argv[i]) == MagickFalse)
02693               ThrowConvertInvalidArgumentException(option,argv[i]);
02694             break;
02695           }
02696         if (LocaleCompare("tile",option+1) == 0)
02697           {
02698             if (*option == '+')
02699               break;
02700             i++;
02701             if (i == (long) (argc-1))
02702               ThrowConvertException(OptionError,"MissingArgument",option);
02703             break;
02704           }
02705         if (LocaleCompare("tile-offset",option+1) == 0)
02706           {
02707             if (*option == '+')
02708               break;
02709             i++;
02710             if (i == (long) (argc-1))
02711               ThrowConvertException(OptionError,"MissingArgument",option);
02712             if (IsGeometry(argv[i]) == MagickFalse)
02713               ThrowConvertInvalidArgumentException(option,argv[i]);
02714             break;
02715           }
02716         if (LocaleCompare("tint",option+1) == 0)
02717           {
02718             if (*option == '+')
02719               break;
02720             i++;
02721             if (i == (long) (argc-1))
02722               ThrowConvertException(OptionError,"MissingArgument",option);
02723             if (IsGeometry(argv[i]) == MagickFalse)
02724               ThrowConvertInvalidArgumentException(option,argv[i]);
02725             break;
02726           }
02727         if (LocaleCompare("transform",option+1) == 0)
02728           break;
02729         if (LocaleCompare("transparent",option+1) == 0)
02730           {
02731             i++;
02732             if (i == (long) (argc-1))
02733               ThrowConvertException(OptionError,"MissingArgument",option);
02734             break;
02735           }
02736         if (LocaleCompare("transparent-color",option+1) == 0)
02737           {
02738             if (*option == '+')
02739               break;
02740             i++;
02741             if (i == (long) (argc-1))
02742               ThrowConvertException(OptionError,"MissingArgument",option);
02743             break;
02744           }
02745         if (LocaleCompare("transpose",option+1) == 0)
02746           break;
02747         if (LocaleCompare("transverse",option+1) == 0)
02748           break;
02749         if (LocaleCompare("treedepth",option+1) == 0)
02750           {
02751             if (*option == '+')
02752               break;
02753             i++;
02754             if (i == (long) (argc-1))
02755               ThrowConvertException(OptionError,"MissingArgument",option);
02756             if (IsGeometry(argv[i]) == MagickFalse)
02757               ThrowConvertInvalidArgumentException(option,argv[i]);
02758             break;
02759           }
02760         if (LocaleCompare("trim",option+1) == 0)
02761           break;
02762         if (LocaleCompare("type",option+1) == 0)
02763           {
02764             long
02765               type;
02766 
02767             if (*option == '+')
02768               break;
02769             i++;
02770             if (i == (long) (argc-1))
02771               ThrowConvertException(OptionError,"MissingArgument",option);
02772             type=ParseMagickOption(MagickTypeOptions,MagickFalse,argv[i]);
02773             if (type < 0)
02774               ThrowConvertException(OptionError,"UnrecognizedImageType",
02775                 argv[i]);
02776             break;
02777           }
02778         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02779       }
02780       case 'u':
02781       {
02782         if (LocaleCompare("undercolor",option+1) == 0)
02783           {
02784             if (*option == '+')
02785               break;
02786             i++;
02787             if (i == (long) (argc-1))
02788               ThrowConvertException(OptionError,"MissingArgument",option);
02789             break;
02790           }
02791         if (LocaleCompare("unique-colors",option+1) == 0)
02792           break;
02793         if (LocaleCompare("units",option+1) == 0)
02794           {
02795             long
02796               units;
02797 
02798             if (*option == '+')
02799               break;
02800             i++;
02801             if (i == (long) (argc-1))
02802               ThrowConvertException(OptionError,"MissingArgument",option);
02803             units=ParseMagickOption(MagickResolutionOptions,MagickFalse,
02804               argv[i]);
02805             if (units < 0)
02806               ThrowConvertException(OptionError,"UnrecognizedUnitsType",
02807                 argv[i]);
02808             break;
02809           }
02810         if (LocaleCompare("unsharp",option+1) == 0)
02811           {
02812             if (*option == '+')
02813               break;
02814             i++;
02815             if (i == (long) (argc-1))
02816               ThrowConvertException(OptionError,"MissingArgument",option);
02817             if (IsGeometry(argv[i]) == MagickFalse)
02818               ThrowConvertInvalidArgumentException(option,argv[i]);
02819             break;
02820           }
02821         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02822       }
02823       case 'v':
02824       {
02825         if (LocaleCompare("verbose",option+1) == 0)
02826           break;
02827         if ((LocaleCompare("version",option+1) == 0) ||
02828             (LocaleCompare("-version",option+1) == 0))
02829           {
02830             (void) fprintf(stdout,"Version: %s\n",
02831               GetMagickVersion((unsigned long *) NULL));
02832             (void) fprintf(stdout,"Copyright: %s\n",GetMagickCopyright());
02833             (void) fprintf(stdout,"Features: %s\n\n",GetMagickFeatures());
02834             break;
02835           }
02836         if (LocaleCompare("view",option+1) == 0)
02837           {
02838             if (*option == '+')
02839               break;
02840             i++;
02841             if (i == (long) (argc-1))
02842               ThrowConvertException(OptionError,"MissingArgument",option);
02843             break;
02844           }
02845         if (LocaleCompare("vignette",option+1) == 0)
02846           {
02847             if (*option == '+')
02848               break;
02849             i++;
02850             if (i == (long) (argc-1))
02851               ThrowConvertException(OptionError,"MissingArgument",option);
02852             if (IsGeometry(argv[i]) == MagickFalse)
02853               ThrowConvertInvalidArgumentException(option,argv[i]);
02854             break;
02855           }
02856         if (LocaleCompare("virtual-pixel",option+1) == 0)
02857           {
02858             long
02859               method;
02860 
02861             if (*option == '+')
02862               break;
02863             i++;
02864             if (i == (long) (argc-1))
02865               ThrowConvertException(OptionError,"MissingArgument",option);
02866             method=ParseMagickOption(MagickVirtualPixelOptions,MagickFalse,
02867               argv[i]);
02868             if (method < 0)
02869               ThrowConvertException(OptionError,
02870                 "UnrecognizedVirtualPixelMethod",argv[i]);
02871             break;
02872           }
02873         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02874       }
02875       case 'w':
02876       {
02877         if (LocaleCompare("wave",option+1) == 0)
02878           {
02879             i++;
02880             if (i == (long) (argc-1))
02881               ThrowConvertException(OptionError,"MissingArgument",option);
02882             if (IsGeometry(argv[i]) == MagickFalse)
02883               ThrowConvertInvalidArgumentException(option,argv[i]);
02884             break;
02885           }
02886         if (LocaleCompare("weight",option+1) == 0)
02887           {
02888             if (*option == '+')
02889               break;
02890             i++;
02891             if (i == (long) (argc-1))
02892               ThrowConvertException(OptionError,"MissingArgument",option);
02893             break;
02894           }
02895         if (LocaleCompare("white-point",option+1) == 0)
02896           {
02897             if (*option == '+')
02898               break;
02899             i++;
02900             if (i == (long) (argc-1))
02901               ThrowConvertException(OptionError,"MissingArgument",option);
02902             if (IsGeometry(argv[i]) == MagickFalse)
02903               ThrowConvertInvalidArgumentException(option,argv[i]);
02904             break;
02905           }
02906         if (LocaleCompare("white-threshold",option+1) == 0)
02907           {
02908             if (*option == '+')
02909               break;
02910             i++;
02911             if (i == (long) (argc-1))
02912               ThrowConvertException(OptionError,"MissingArgument",option);
02913             if (IsGeometry(argv[i]) == MagickFalse)
02914               ThrowConvertInvalidArgumentException(option,argv[i]);
02915             break;
02916           }
02917         if (LocaleCompare("write",option+1) == 0)
02918           {
02919             i++;
02920             if (i == (long) (argc-1))
02921               ThrowConvertException(OptionError,"MissingArgument",option);
02922             break;
02923           }
02924         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02925       }
02926       case '?':
02927         break;
02928       default:
02929         ThrowConvertException(OptionError,"UnrecognizedOption",option)
02930     }
02931     fire=ParseMagickOption(MagickImageListOptions,MagickFalse,option+1) < 0 ?
02932       MagickFalse : MagickTrue;
02933     if (fire != MagickFalse)
02934       FireImageStack(MagickTrue,MagickTrue,MagickTrue);
02935   }
02936   if (k != 0)
02937     ThrowConvertException(OptionError,"UnbalancedParenthesis",argv[i]);
02938   if (i-- != (long) (argc-1))
02939     ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
02940   if (image == (Image *) NULL)
02941     ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
02942   FinalizeImageSettings(image_info,image,MagickTrue);
02943   if (image == (Image *) NULL)
02944     ThrowConvertException(OptionError,"MissingAnImageFilename",argv[argc-1]);
02945   status&=WriteImages(image_info,image,argv[argc-1],exception);
02946   if (metadata != (char **) NULL)
02947     {
02948       char
02949         *text;
02950 
02951       text=InterpretImageProperties(image_info,image,format);
02952       if (text == (char *) NULL)
02953         ThrowConvertException(ResourceLimitError,"MemoryAllocationFailed",
02954           GetExceptionMessage(errno));
02955       (void) ConcatenateString(&(*metadata),text);
02956       text=DestroyString(text);
02957     }
02958   DestroyConvert();
02959   return(status != 0 ? MagickTrue : MagickFalse);
02960 }
Generated by  doxygen 1.6.2-20100208