2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 % IIIII M M PPPP OOO RRRR TTTTT %
7 % I MM MM P P O O R R T %
8 % I M M M PPPP O O RRRR T %
10 % IIIII M M P OOO R R T %
13 % Import Image from X11 Screen %
20 % Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization %
21 % dedicated to making software imaging solutions freely available. %
23 % You may not use this file except in compliance with the License. You may %
24 % obtain a copy of the License at %
26 % http://www.imagemagick.org/script/license.php %
28 % Unless required by applicable law or agreed to in writing, software %
29 % distributed under the License is distributed on an "AS IS" BASIS, %
30 % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
31 % See the License for the specific language governing permissions and %
32 % limitations under the License. %
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 % Use the import program to capture some or all of an X server screen and
37 % save the image to a file.
44 #include "wand/studio.h"
45 #include "wand/MagickWand.h"
46 #include "wand/mogrify-private.h"
47 #include "magick/xwindow-private.h"
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54 + I m p o r t I m a g e C o m m a n d %
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
60 % ImportImageCommand() reads an image from any visible window on an X server
61 % and outputs it as an image file. You can capture a single window, the
62 % entire screen, or any rectangular portion of the screen. You can use the
63 % display utility for redisplay, printing, editing, formatting, archiving,
64 % image processing, etc. of the captured image.</dd>
66 % The target window can be specified by id, name, or may be selected by
67 % clicking the mouse in the desired window. If you press a button and then
68 % drag, a rectangle will form which expands and contracts as the mouse moves.
69 % To save the portion of the screen defined by the rectangle, just release
70 % the button. The keyboard bell is rung once at the beginning of the screen
71 % capture and twice when it completes.
73 % The format of the ImportImageCommand method is:
75 % MagickBooleanType ImportImageCommand(ImageInfo *image_info,int argc,
76 % char **argv,char **metadata,ExceptionInfo *exception)
78 % A description of each parameter follows:
80 % o image_info: the image info.
82 % o argc: the number of elements in the argument vector.
84 % o argv: A text array containing the command line arguments.
86 % o metadata: any metadata is returned here.
88 % o exception: return any errors or warnings in this structure.
92 static MagickBooleanType ImportUsage(void)
100 "-debug events display copious debugging information",
101 "-help print program options",
102 "-list type print a list of supported option arguments",
103 "-log format format of debugging information",
104 "-version print version information",
109 "-annotate geometry text",
110 " annotate the image with text",
111 "-border include image borders in the output image",
112 "-colors value preferred number of colors in the image",
113 "-crop geometry preferred size and location of the cropped image",
114 "-encipher filename convert plain pixels to cipher pixels",
115 "-geometry geometry preferred size or location of the image",
116 "-help print program options",
117 "-monochrome transform image to black and white",
118 "-negate replace every pixel with its complementary color ",
119 "-repage geometry size and location of an image canvas",
120 "-quantize colorspace reduce colors in this colorspace",
121 "-resize geometry resize the image",
122 "-rotate degrees apply Paeth rotation to the image",
123 "-strip strip image of all profiles and comments",
124 "-thumbnail geometry create a thumbnail of the image",
125 "-transparent color make this color transparent within the image",
126 "-trim trim image edges",
127 "-type type image type",
132 "-adjoin join images into a single multi-image file",
133 "-channel type apply option to select image channels",
134 "-colorspace type alternate image colorspace",
135 "-comment string annotate image with comment",
136 "-compress type type of pixel compression when writing the image",
137 "-define format:option",
138 " define one or more image format options",
139 "-density geometry horizontal and vertical density of the image",
140 "-depth value image depth",
141 "-descend obtain image by descending window hierarchy",
142 "-display server X server to contact",
143 "-dispose method layer disposal method",
144 "-dither method apply error diffusion to image",
145 "-delay value display the next image after pausing",
146 "-encipher filename convert plain pixels to cipher pixels",
147 "-endian type endianness (MSB or LSB) of the image",
148 "-encoding type text encoding type",
149 "-filter type use this filter when resizing an image",
150 "-format \"string\" output formatted image characteristics",
151 "-frame include window manager frame",
152 "-gravity direction which direction to gravitate towards",
153 "-identify identify the format and characteristics of the image",
154 "-interlace type None, Line, Plane, or Partition",
155 "-interpolate method pixel color interpolation method",
156 "-label string assign a label to an image",
157 "-limit type value Area, Disk, Map, or Memory resource limit",
158 "-monitor monitor progress",
159 "-page geometry size and location of an image canvas",
160 "-pause value seconds delay between snapshots",
161 "-pointsize value font point size",
162 "-quality value JPEG/MIFF/PNG compression level",
163 "-quiet suppress all warning messages",
164 "-regard-warnings pay attention to warning messages",
165 "-respect-parentheses settings remain in effect until parenthesis boundary",
166 "-sampling-factor geometry",
167 " horizontal and vertical sampling factor",
168 "-scene value image scene number",
169 "-screen select image from root window",
170 "-seed value seed a new sequence of pseudo-random numbers",
171 "-set property value set an image property",
172 "-silent operate silently, i.e. don't ring any bells ",
173 "-snaps value number of screen snapshots",
174 "-transparent-color color",
175 " transparent color",
176 "-treedepth value color tree depth",
177 "-verbose print detailed information about the image",
178 "-virtual-pixel method",
179 " Constant, Edge, Mirror, or Tile",
180 "-window id select window with this id or name",
184 (void) printf("Version: %s\n",GetMagickVersion((unsigned long *) NULL));
185 (void) printf("Copyright: %s\n",GetMagickCopyright());
186 (void) printf("Features: %s\n\n",GetMagickFeatures());
187 (void) printf("Usage: %s [options ...] [ file ]\n",
189 (void) printf("\nImage Settings:\n");
190 for (p=settings; *p != (char *) NULL; p++)
191 (void) printf(" %s\n",*p);
192 (void) printf("\nImage Operators:\n");
193 for (p=operators; *p != (char *) NULL; p++)
194 (void) printf(" %s\n",*p);
195 (void) printf("\nMiscellaneous Options:\n");
196 for (p=miscellaneous; *p != (char *) NULL; p++)
197 (void) printf(" %s\n",*p);
199 "\nBy default, 'file' is written in the MIFF image format. To\n");
201 "specify a particular image format, precede the filename with an image\n");
203 "format name and a colon (i.e. ps:image) or specify the image type as\n");
205 "the filename suffix (i.e. image.ps). Specify 'file' as '-' for\n");
206 (void) printf("standard input or output.\n");
210 static inline long MagickMax(const long x,const long y)
217 WandExport MagickBooleanType ImportImageCommand(ImageInfo *image_info,
218 int argc,char **argv,char **wand_unused(metadata),ExceptionInfo *exception)
220 #if defined(MAGICKCORE_X11_DELEGATE)
221 #define DestroyImport() \
223 XDestroyResourceInfo(&resource_info); \
224 if (display != (Display *) NULL) \
226 XCloseDisplay(display); \
227 display=(Display *) NULL; \
229 DestroyImageStack(); \
230 if (target_window != (char *) NULL) \
231 target_window=DestroyString(target_window); \
232 for (i=0; i < (long) argc; i++) \
233 argv[i]=DestroyString(argv[i]); \
234 argv=(char **) RelinquishMagickMemory(argv); \
236 #define ThrowImportException(asperity,tag,option) \
238 (void) ThrowMagickException(exception,GetMagickModule(),asperity,tag,"`%s'", \
241 return(MagickFalse); \
243 #define ThrowImportInvalidArgumentException(option,argument) \
245 (void) ThrowMagickException(exception,GetMagickModule(),OptionError, \
246 "InvalidArgument","`%s': %s",option,argument); \
248 return(MagickFalse); \
265 image_stack[MaxImageStackDepth+1];
297 assert(image_info != (ImageInfo *) NULL);
298 assert(image_info->signature == MagickSignature);
299 if (image_info->debug != MagickFalse)
300 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
301 assert(exception != (ExceptionInfo *) NULL);
305 if ((LocaleCompare("version",option+1) == 0) ||
306 (LocaleCompare("-version",option+1) == 0))
308 (void) fprintf(stdout,"Version: %s\n",
309 GetMagickVersion((unsigned long *) NULL));
310 (void) fprintf(stdout,"Copyright: %s\n\n",GetMagickCopyright());
314 display=(Display *) NULL;
318 option=(char *) NULL;
320 resource_database=(XrmDatabase) NULL;
321 (void) ResetMagickMemory(&resource_info,0,sizeof(resource_info));
322 server_name=(char *) NULL;
325 target_window=(char *) NULL;
327 Check for server name specified on the command line.
329 ReadCommandlLine(argc,&argv);
330 status=ExpandFilenames(&argc,&argv);
331 if (status == MagickFalse)
332 ThrowImportException(ResourceLimitError,"MemoryAllocationFailed",
333 GetExceptionMessage(errno));
334 for (i=1; i < (long) argc; i++)
337 Check command line for server name.
340 if (LocaleCompare("display",option+1) == 0)
343 User specified server name.
346 if (i == (long) argc)
347 ThrowImportException(OptionError,"MissingArgument",option);
350 if ((LocaleCompare("help",option+1) == 0) ||
351 (LocaleCompare("-help",option+1) == 0))
352 return(ImportUsage());
355 Get user defaults from X resource database.
357 display=XOpenDisplay(server_name);
358 if (display == (Display *) NULL)
359 ThrowImportException(XServerError,"UnableToOpenXServer",
360 XDisplayName(server_name));
361 (void) XSetErrorHandler(XError);
362 resource_database=XGetResourceDatabase(display,GetClientName());
363 XGetImportInfo(&ximage_info);
364 XGetResourceInfo(image_info,resource_database,GetClientName(),
366 quantize_info=resource_info.quantize_info;
367 resource_value=XGetResourceInstance(resource_database,GetClientName(),
369 ximage_info.borders=IsMagickTrue(resource_value);
370 resource_value=XGetResourceInstance(resource_database,GetClientName(),
372 resource_info.delay=(unsigned int) atoi(resource_value);
373 image_info->density=XGetResourceInstance(resource_database,GetClientName(),
374 "density",(char *) NULL);
375 resource_value=XGetResourceInstance(resource_database,GetClientName(),
377 ximage_info.descend=IsMagickTrue(resource_value);
378 resource_value=XGetResourceInstance(resource_database,GetClientName(),
380 ximage_info.frame=IsMagickTrue(resource_value);
381 resource_value=XGetResourceInstance(resource_database,GetClientName(),
383 image_info->interlace=UndefinedInterlace;
384 if (LocaleCompare("None",resource_value) == 0)
385 image_info->interlace=NoInterlace;
386 if (LocaleCompare("Line",resource_value) == 0)
387 image_info->interlace=LineInterlace;
388 if (LocaleCompare("Plane",resource_value) == 0)
389 image_info->interlace=PlaneInterlace;
390 if (LocaleCompare("Partition",resource_value) == 0)
391 image_info->interlace=PartitionInterlace;
392 if (image_info->interlace == UndefinedInterlace)
393 ThrowImportException(OptionError,"Unrecognized interlace type",
395 image_info->page=XGetResourceInstance(resource_database,GetClientName(),
396 "pageGeometry",(char *) NULL);
397 resource_value=XGetResourceInstance(resource_database,GetClientName(),
399 resource_info.pause=(unsigned int) atol(resource_value);
400 resource_value=XGetResourceInstance(resource_database,GetClientName(),
402 image_info->quality=(unsigned long) atol(resource_value);
403 resource_value=XGetResourceInstance(resource_database,GetClientName(),
405 ximage_info.screen=IsMagickTrue(resource_value);
406 resource_value=XGetResourceInstance(resource_database,GetClientName(),
408 ximage_info.silent=IsMagickTrue(resource_value);
409 resource_value=XGetResourceInstance(resource_database,GetClientName(),
411 image_info->verbose=IsMagickTrue(resource_value);
412 resource_value=XGetResourceInstance(resource_database,GetClientName(),
414 quantize_info->dither=IsMagickTrue(resource_value);
417 filename=(char *) NULL;
419 Check command syntax.
421 for (i=1; i < (long) argc; i++)
424 if (LocaleCompare(option,"(") == 0)
426 FireImageStack(MagickFalse,MagickTrue,pend);
427 if (k == MaxImageStackDepth)
428 ThrowImportException(OptionError,"ParenthesisNestedTooDeeply",
433 if (LocaleCompare(option,")") == 0)
435 FireImageStack(MagickFalse,MagickTrue,MagickTrue);
437 ThrowImportException(OptionError,"UnableToParseExpression",option);
441 if (IsMagickOption(option) == MagickFalse)
450 Read image from X server.
452 FireImageStack(MagickFalse,MagickFalse,pend);
454 if (target_window != (char *) NULL)
455 (void) CopyMagickString(image_info->filename,target_window,
457 for (scene=0; scene < (unsigned long) MagickMax(snapshots,1); scene++)
459 (void) sleep(resource_info.pause);
460 images=XImportImage(image_info,&ximage_info);
461 status&=(images != (Image *) NULL) &&
462 (exception->severity < ErrorException);
463 if (images == (Image *) NULL)
465 (void) CopyMagickString(images->filename,filename,MaxTextExtent);
466 (void) CopyMagickString(images->magick,"PS",MaxTextExtent);
468 AppendImageStack(images);
472 pend=image != (Image *) NULL ? MagickTrue : MagickFalse;
477 if (LocaleCompare("adjoin",option+1) == 0)
479 if (LocaleCompare("annotate",option+1) == 0)
484 if (i == (long) (argc-1))
485 ThrowImportException(OptionError,"MissingArgument",option);
486 if (IsGeometry(argv[i]) == MagickFalse)
487 ThrowImportInvalidArgumentException(option,argv[i]);
488 if (i == (long) (argc-1))
489 ThrowImportException(OptionError,"MissingArgument",option);
493 ThrowImportException(OptionError,"UnrecognizedOption",option);
497 if (LocaleCompare("border",option+1) == 0)
499 (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
500 ximage_info.borders=(*option == '-') ? MagickTrue : MagickFalse;
503 if (LocaleCompare("bordercolor",option+1) == 0)
508 if (i == (long) argc)
509 ThrowImportException(OptionError,"MissingArgument",option);
512 ThrowImportException(OptionError,"UnrecognizedOption",option);
516 if (LocaleCompare("cache",option+1) == 0)
521 if (i == (long) argc)
522 ThrowImportException(OptionError,"MissingArgument",option);
523 if (IsGeometry(argv[i]) == MagickFalse)
524 ThrowImportInvalidArgumentException(option,argv[i]);
527 if (LocaleCompare("channel",option+1) == 0)
535 if (i == (long) (argc-1))
536 ThrowImportException(OptionError,"MissingArgument",option);
537 channel=ParseChannelOption(argv[i]);
539 ThrowImportException(OptionError,"UnrecognizedChannelType",
543 if (LocaleCompare("colors",option+1) == 0)
545 quantize_info->number_colors=0;
549 if (i == (long) argc)
550 ThrowImportException(OptionError,"MissingArgument",option);
551 if (IsGeometry(argv[i]) == MagickFalse)
552 ThrowImportInvalidArgumentException(option,argv[i]);
553 quantize_info->number_colors=(unsigned long) atol(argv[i]);
556 if (LocaleCompare("colorspace",option+1) == 0)
564 if (i == (long) argc)
565 ThrowImportException(OptionError,"MissingArgument",option);
566 colorspace=ParseMagickOption(MagickColorspaceOptions,MagickFalse,
569 ThrowImportException(OptionError,"UnrecognizedColorspace",
573 if (LocaleCompare("comment",option+1) == 0)
578 if (i == (long) argc)
579 ThrowImportException(OptionError,"MissingArgument",option);
580 status=SetImageOption(image_info,"comment",argv[i]);
581 if (status == MagickFalse)
582 ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
585 if (LocaleCompare("compress",option+1) == 0)
593 if (i == (long) argc)
594 ThrowImportException(OptionError,"MissingArgument",option);
595 compress=ParseMagickOption(MagickCompressOptions,MagickFalse,
598 ThrowImportException(OptionError,"UnrecognizedImageCompression",
602 if (LocaleCompare("crop",option+1) == 0)
607 if (i == (long) argc)
608 ThrowImportException(OptionError,"MissingArgument",option);
609 if (IsGeometry(argv[i]) == MagickFalse)
610 ThrowImportInvalidArgumentException(option,argv[i]);
613 ThrowImportException(OptionError,"UnrecognizedOption",option);
617 if (LocaleCompare("debug",option+1) == 0)
625 if (i == (long) argc)
626 ThrowImportException(OptionError,"MissingArgument",option);
627 event=ParseMagickOption(MagickLogEventOptions,MagickFalse,argv[i]);
629 ThrowImportException(OptionError,"UnrecognizedEventType",argv[i]);
630 (void) SetLogEventMask(argv[i]);
633 if (LocaleCompare("define",option+1) == 0)
636 if (i == (long) argc)
637 ThrowImportException(OptionError,"MissingArgument",option);
643 define=GetImageOption(image_info,argv[i]);
644 if (define == (char *) NULL)
645 ThrowImportException(OptionError,"NoSuchOption",argv[i]);
650 if (LocaleCompare("delay",option+1) == 0)
655 if (i == (long) argc)
656 ThrowImportException(OptionError,"MissingArgument",option);
657 if (IsGeometry(argv[i]) == MagickFalse)
658 ThrowImportInvalidArgumentException(option,argv[i]);
659 status=SetImageOption(image_info,"delay",argv[i]);
660 if (status == MagickFalse)
661 ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
664 if (LocaleCompare("density",option+1) == 0)
669 if (i == (long) argc)
670 ThrowImportException(OptionError,"MissingArgument",option);
671 if (IsGeometry(argv[i]) == MagickFalse)
672 ThrowImportInvalidArgumentException(option,argv[i]);
675 if (LocaleCompare("depth",option+1) == 0)
680 if (i == (long) argc)
681 ThrowImportException(OptionError,"MissingArgument",option);
682 if (IsGeometry(argv[i]) == MagickFalse)
683 ThrowImportInvalidArgumentException(option,argv[i]);
686 if (LocaleCompare("descend",option+1) == 0)
688 ximage_info.descend=(*option == '-') ? MagickTrue : MagickFalse;
691 if (LocaleCompare("display",option+1) == 0)
696 if (i == (long) argc)
697 ThrowImportException(OptionError,"MissingArgument",option);
700 if (LocaleCompare("dispose",option+1) == 0)
708 if (i == (long) argc)
709 ThrowImportException(OptionError,"MissingArgument",option);
710 dispose=ParseMagickOption(MagickDisposeOptions,MagickFalse,argv[i]);
712 ThrowImportException(OptionError,"UnrecognizedDisposeMethod",
716 if (LocaleCompare("dither",option+1) == 0)
721 quantize_info->dither=MagickFalse;
725 if (i == (long) argc)
726 ThrowImportException(OptionError,"MissingArgument",option);
727 method=ParseMagickOption(MagickDitherOptions,MagickFalse,argv[i]);
729 ThrowImportException(OptionError,"UnrecognizedDitherMethod",
731 quantize_info->dither=MagickTrue;
732 quantize_info->dither_method=(DitherMethod) method;
735 ThrowImportException(OptionError,"UnrecognizedOption",option);
739 if (LocaleCompare("encipher",option+1) == 0)
744 if (i == (long) (argc-1))
745 ThrowImportException(OptionError,"MissingArgument",option);
748 if (LocaleCompare("encoding",option+1) == 0)
753 if (i == (long) argc)
754 ThrowImportException(OptionError,"MissingArgument",option);
757 if (LocaleCompare("endian",option+1) == 0)
765 if (i == (long) argc)
766 ThrowImportException(OptionError,"MissingArgument",option);
767 endian=ParseMagickOption(MagickEndianOptions,MagickFalse,
770 ThrowImportException(OptionError,"UnrecognizedEndianType",
774 ThrowImportException(OptionError,"UnrecognizedOption",option);
778 if (LocaleCompare("filter",option+1) == 0)
786 if (i == (long) (argc-1))
787 ThrowImportException(OptionError,"MissingArgument",option);
788 filter=ParseMagickOption(MagickFilterOptions,MagickFalse,argv[i]);
790 ThrowImportException(OptionError,"UnrecognizedImageFilter",
794 if (LocaleCompare("frame",option+1) == 0)
796 (void) CopyMagickString(argv[i]+1,"sans0",MaxTextExtent);
797 ximage_info.frame=(*option == '-') ? MagickTrue : MagickFalse;
800 if (LocaleCompare("format",option+1) == 0)
805 if (i == (long) (argc-1))
806 ThrowImportException(OptionError,"MissingArgument",option);
809 ThrowImportException(OptionError,"UnrecognizedOption",option);
813 if (LocaleCompare("geometry",option+1) == 0)
818 if (i == (long) argc)
819 ThrowImportException(OptionError,"MissingArgument",option);
820 if (IsGeometry(argv[i]) == MagickFalse)
821 ThrowImportInvalidArgumentException(option,argv[i]);
824 if (LocaleCompare("gravity",option+1) == 0)
832 if (i == (long) argc)
833 ThrowImportException(OptionError,"MissingArgument",option);
834 gravity=ParseMagickOption(MagickGravityOptions,MagickFalse,argv[i]);
836 ThrowImportException(OptionError,"UnrecognizedGravityType",
840 ThrowImportException(OptionError,"UnrecognizedOption",option);
844 if (LocaleCompare("help",option+1) == 0)
846 ThrowImportException(OptionError,"UnrecognizedOption",option);
850 if (LocaleCompare("identify",option+1) == 0)
852 if (LocaleCompare("interlace",option+1) == 0)
860 if (i == (long) argc)
861 ThrowImportException(OptionError,"MissingArgument",option);
862 interlace=ParseMagickOption(MagickInterlaceOptions,MagickFalse,
865 ThrowImportException(OptionError,"UnrecognizedInterlaceType",
869 if (LocaleCompare("interpolate",option+1) == 0)
877 if (i == (long) argc)
878 ThrowImportException(OptionError,"MissingArgument",option);
879 interpolate=ParseMagickOption(MagickInterpolateOptions,MagickFalse,
882 ThrowImportException(OptionError,"UnrecognizedInterpolateMethod",
886 ThrowImportException(OptionError,"UnrecognizedOption",option);
890 if (LocaleCompare("label",option+1) == 0)
895 if (i == (long) argc)
896 ThrowImportException(OptionError,"MissingArgument",option);
897 status=SetImageOption(image_info,"label",argv[i]);
898 if (status == MagickFalse)
899 ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
902 if (LocaleCompare("limit",option+1) == 0)
916 if (i == (long) argc)
917 ThrowImportException(OptionError,"MissingArgument",option);
918 resource=ParseMagickOption(MagickResourceOptions,MagickFalse,
921 ThrowImportException(OptionError,"UnrecognizedResourceType",
924 if (i == (long) argc)
925 ThrowImportException(OptionError,"MissingArgument",option);
926 value=strtod(argv[i],&p);
927 if ((p == argv[i]) && (LocaleCompare("unlimited",argv[i]) != 0))
928 ThrowImportInvalidArgumentException(option,argv[i]);
931 if (LocaleCompare("list",option+1) == 0)
939 if (i == (long) argc)
940 ThrowImportException(OptionError,"MissingArgument",option);
941 list=ParseMagickOption(MagickListOptions,MagickFalse,argv[i]);
943 ThrowImportException(OptionError,"UnrecognizedListType",argv[i]);
944 (void) MogrifyImageInfo(image_info,(int) (i-j+1),(const char **)
949 if (LocaleCompare("log",option+1) == 0)
954 if ((i == (long) argc) || (strchr(argv[i],'%') == (char *) NULL))
955 ThrowImportException(OptionError,"MissingArgument",option);
958 ThrowImportException(OptionError,"UnrecognizedOption",option);
962 if (LocaleCompare("monitor",option+1) == 0)
964 if (LocaleCompare("monochrome",option+1) == 0)
968 quantize_info->number_colors=2;
969 quantize_info->colorspace=GRAYColorspace;
972 ThrowImportException(OptionError,"UnrecognizedOption",option);
976 if (LocaleCompare("negate",option+1) == 0)
978 ThrowImportException(OptionError,"UnrecognizedOption",option);
982 if (LocaleCompare("page",option+1) == 0)
987 if (i == (long) argc)
988 ThrowImportException(OptionError,"MissingArgument",option);
989 status=SetImageOption(image_info,"page",argv[i]);
990 if (status == MagickFalse)
991 ThrowImportException(OptionError,"UnrecognizedOption",argv[i]);
994 if (LocaleCompare("pause",option+1) == 0)
996 resource_info.pause=0;
1000 if (i == (long) argc)
1001 ThrowImportException(OptionError,"MissingArgument",option);
1002 if (IsGeometry(argv[i]) == MagickFalse)
1003 ThrowImportInvalidArgumentException(option,argv[i]);
1004 resource_info.pause=(unsigned int) atoi(argv[i]);
1007 if (LocaleCompare("ping",option+1) == 0)
1008 break; /* deprecated option */
1009 if (LocaleCompare("pointsize",option+1) == 0)
1014 if (i == (long) argc)
1015 ThrowImportException(OptionError,"MissingArgument",option);
1016 if (IsGeometry(argv[i]) == MagickFalse)
1017 ThrowImportInvalidArgumentException(option,argv[i]);
1020 ThrowImportException(OptionError,"UnrecognizedOption",option);
1024 if (LocaleCompare("quality",option+1) == 0)
1029 if (i == (long) argc)
1030 ThrowImportException(OptionError,"MissingArgument",option);
1031 if (IsGeometry(argv[i]) == MagickFalse)
1032 ThrowImportInvalidArgumentException(option,argv[i]);
1035 if (LocaleCompare("quantize",option+1) == 0)
1043 if (i == (long) (argc-1))
1044 ThrowImportException(OptionError,"MissingArgument",option);
1045 colorspace=ParseMagickOption(MagickColorspaceOptions,
1046 MagickFalse,argv[i]);
1048 ThrowImportException(OptionError,"UnrecognizedColorspace",
1052 if (LocaleCompare("quiet",option+1) == 0)
1054 ThrowImportException(OptionError,"UnrecognizedOption",option);
1058 if (LocaleCompare("regard-warnings",option+1) == 0)
1060 if (LocaleCompare("repage",option+1) == 0)
1065 if (i == (long) (argc-1))
1066 ThrowImportException(OptionError,"MissingArgument",option);
1067 if (IsGeometry(argv[i]) == MagickFalse)
1068 ThrowImportInvalidArgumentException(option,argv[i]);
1071 if (LocaleCompare("resize",option+1) == 0)
1076 if (i == (long) argc)
1077 ThrowImportException(OptionError,"MissingArgument",option);
1078 if (IsGeometry(argv[i]) == MagickFalse)
1079 ThrowImportInvalidArgumentException(option,argv[i]);
1082 if (LocaleNCompare("respect-parentheses",option+1,17) == 0)
1084 respect_parenthesis=(*option == '-') ? MagickTrue : MagickFalse;
1087 if (LocaleCompare("rotate",option+1) == 0)
1090 if (i == (long) argc)
1091 ThrowImportException(OptionError,"MissingArgument",option);
1092 if (IsGeometry(argv[i]) == MagickFalse)
1093 ThrowImportInvalidArgumentException(option,argv[i]);
1096 ThrowImportException(OptionError,"UnrecognizedOption",option);
1100 if (LocaleCompare("sampling-factor",option+1) == 0)
1105 if (i == (long) argc)
1106 ThrowImportException(OptionError,"MissingArgument",option);
1107 if (IsGeometry(argv[i]) == MagickFalse)
1108 ThrowImportInvalidArgumentException(option,argv[i]);
1111 if (LocaleCompare("scene",option+1) == 0)
1116 if (i == (long) argc)
1117 ThrowImportException(OptionError,"MissingArgument",option);
1118 if (IsGeometry(argv[i]) == MagickFalse)
1119 ThrowImportInvalidArgumentException(option,argv[i]);
1122 if (LocaleCompare("set",option+1) == 0)
1125 if (i == (long) argc)
1126 ThrowImportException(OptionError,"MissingArgument",option);
1130 if (i == (long) argc)
1131 ThrowImportException(OptionError,"MissingArgument",option);
1134 if (LocaleCompare("screen",option+1) == 0)
1136 ximage_info.screen=(*option == '-') ? MagickTrue : MagickFalse;
1139 if (LocaleCompare("seed",option+1) == 0)
1144 if (i == (long) (argc-1))
1145 ThrowImportException(OptionError,"MissingArgument",option);
1146 if (IsGeometry(argv[i]) == MagickFalse)
1147 ThrowImportInvalidArgumentException(option,argv[i]);
1150 if (LocaleCompare("silent",option+1) == 0)
1152 ximage_info.silent=(*option == '-') ? MagickTrue : MagickFalse;
1155 if (LocaleCompare("snaps",option+1) == 0)
1157 (void) CopyMagickString(argv[i]+1,"sans",MaxTextExtent);
1159 if (i == (long) argc)
1160 ThrowImportException(OptionError,"MissingArgument",option);
1161 if (IsGeometry(argv[i]) == MagickFalse)
1162 ThrowImportInvalidArgumentException(option,argv[i]);
1163 snapshots=atol(argv[i]);
1166 if (LocaleCompare("strip",option+1) == 0)
1168 if (LocaleCompare("support",option+1) == 0)
1170 i++; /* deprecated */
1173 ThrowImportException(OptionError,"UnrecognizedOption",option);
1177 if (LocaleCompare("thumnail",option+1) == 0)
1182 if (i == (long) argc)
1183 ThrowImportException(OptionError,"MissingArgument",option);
1184 if (IsGeometry(argv[i]) == MagickFalse)
1185 ThrowImportInvalidArgumentException(option,argv[i]);
1188 if (LocaleCompare("transparent",option+1) == 0)
1191 if (i == (long) argc)
1192 ThrowImportException(OptionError,"MissingArgument",option);
1195 if (LocaleCompare("transparent-color",option+1) == 0)
1200 if (i == (long) (argc-1))
1201 ThrowImportException(OptionError,"MissingArgument",option);
1204 if (LocaleCompare("treedepth",option+1) == 0)
1206 quantize_info->tree_depth=0;
1210 if (i == (long) argc)
1211 ThrowImportException(OptionError,"MissingArgument",option);
1212 if (IsGeometry(argv[i]) == MagickFalse)
1213 ThrowImportInvalidArgumentException(option,argv[i]);
1214 quantize_info->tree_depth=(unsigned long) atol(argv[i]);
1217 if (LocaleCompare("trim",option+1) == 0)
1219 if (LocaleCompare("type",option+1) == 0)
1227 if (i == (long) argc)
1228 ThrowImportException(OptionError,"MissingArgument",option);
1229 type=ParseMagickOption(MagickTypeOptions,MagickFalse,argv[i]);
1231 ThrowImportException(OptionError,"UnrecognizedImageType",argv[i]);
1234 ThrowImportException(OptionError,"UnrecognizedOption",option);
1239 if (i == (long) argc)
1240 ThrowImportException(OptionError,"MissingArgument",option);
1241 (void) CloneString(&target_window,argv[i]);
1246 if (LocaleCompare("verbose",option+1) == 0)
1248 if ((LocaleCompare("version",option+1) == 0) ||
1249 (LocaleCompare("-version",option+1) == 0))
1251 (void) fprintf(stdout,"Version: %s\n",
1252 GetMagickVersion((unsigned long *) NULL));
1253 (void) fprintf(stdout,"Copyright: %s\n\n",GetMagickCopyright());
1256 ThrowImportException(OptionError,"UnrecognizedOption",option);
1261 ThrowImportException(OptionError,"UnrecognizedOption",option);
1263 fire=ParseMagickOption(MagickImageListOptions,MagickFalse,option+1) < 0 ?
1264 MagickFalse : MagickTrue;
1265 if (fire != MagickFalse)
1266 FireImageStack(MagickFalse,MagickTrue,MagickTrue);
1269 ThrowImportException(OptionError,"UnbalancedParenthesis",argv[i]);
1271 ThrowImportException(OptionError,"MissingAnImageFilename",argv[i]);
1272 if (image == (Image *) NULL)
1273 ThrowImportException(OptionError,"MissingAnImageFilename",argv[argc-1]);
1274 FinalizeImageSettings(image_info,image,MagickTrue);
1275 status&=WriteImages(image_info,image,filename,exception);
1277 return(status != 0 ? MagickTrue : MagickFalse);
1281 (void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
1282 "DelegateLibrarySupportNotBuiltIn","`%s' (X11)",image_info->filename);
1283 return(ImportUsage());