1805a2d48e7e2ed7d699871183ed706699119281canthony/* 2805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3805a2d48e7e2ed7d699871183ed706699119281canthony% % 4805a2d48e7e2ed7d699871183ed706699119281canthony% % 5805a2d48e7e2ed7d699871183ed706699119281canthony% % 68b10b467b5c281df759ba33f9a4a9228509adc4danthony% OOO PPPP EEEE RRRR AA TTTTT III OOO N N % 78b10b467b5c281df759ba33f9a4a9228509adc4danthony% O O P P E R R A A T I O O NN N % 88b10b467b5c281df759ba33f9a4a9228509adc4danthony% O O PPPP EEE RRRR AAAA T I O O N N N % 98b10b467b5c281df759ba33f9a4a9228509adc4danthony% O O P E R R A A T I O O N NN % 108b10b467b5c281df759ba33f9a4a9228509adc4danthony% OOO P EEEE R RR A A T III OOO N N % 11805a2d48e7e2ed7d699871183ed706699119281canthony% % 12805a2d48e7e2ed7d699871183ed706699119281canthony% % 138b10b467b5c281df759ba33f9a4a9228509adc4danthony% CLI Magick Option Methods % 14805a2d48e7e2ed7d699871183ed706699119281canthony% % 158b10b467b5c281df759ba33f9a4a9228509adc4danthony% Dragon Computing % 169e58efd1ec91478e573f00be873ed1e140d70914cristy% Anthony Thyssen % 170a0ca4f50dc7ea975793a2e041e3cd64c3a5eea2cristy% September 2011 % 18805a2d48e7e2ed7d699871183ed706699119281canthony% % 19805a2d48e7e2ed7d699871183ed706699119281canthony% % 207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 21805a2d48e7e2ed7d699871183ed706699119281canthony% dedicated to making software imaging solutions freely available. % 22805a2d48e7e2ed7d699871183ed706699119281canthony% % 23805a2d48e7e2ed7d699871183ed706699119281canthony% You may not use this file except in compliance with the License. You may % 24805a2d48e7e2ed7d699871183ed706699119281canthony% obtain a copy of the License at % 25805a2d48e7e2ed7d699871183ed706699119281canthony% % 26805a2d48e7e2ed7d699871183ed706699119281canthony% http://www.imagemagick.org/script/license.php % 27805a2d48e7e2ed7d699871183ed706699119281canthony% % 28805a2d48e7e2ed7d699871183ed706699119281canthony% Unless required by applicable law or agreed to in writing, software % 29805a2d48e7e2ed7d699871183ed706699119281canthony% distributed under the License is distributed on an "AS IS" BASIS, % 30805a2d48e7e2ed7d699871183ed706699119281canthony% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 31805a2d48e7e2ed7d699871183ed706699119281canthony% See the License for the specific language governing permissions and % 32805a2d48e7e2ed7d699871183ed706699119281canthony% limitations under the License. % 33805a2d48e7e2ed7d699871183ed706699119281canthony% % 34805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 35805a2d48e7e2ed7d699871183ed706699119281canthony% 36805a2d48e7e2ed7d699871183ed706699119281canthony% Apply the given options (settings, and simple, or sequence operations) to 378b10b467b5c281df759ba33f9a4a9228509adc4danthony% the given image(s) according to the current "image_info", "draw_info", and 388b10b467b5c281df759ba33f9a4a9228509adc4danthony% "quantize_info" settings, stored in a special CLI Image Wand. 39805a2d48e7e2ed7d699871183ed706699119281canthony% 40805a2d48e7e2ed7d699871183ed706699119281canthony% The final goal is to allow the execution in a strict one option at a time 41805a2d48e7e2ed7d699871183ed706699119281canthony% manner that is needed for 'pipelining and file scripting' of options in 42805a2d48e7e2ed7d699871183ed706699119281canthony% IMv7. 43805a2d48e7e2ed7d699871183ed706699119281canthony% 448b10b467b5c281df759ba33f9a4a9228509adc4danthony% Anthony Thyssen, September 2011 45805a2d48e7e2ed7d699871183ed706699119281canthony*/ 46805a2d48e7e2ed7d699871183ed706699119281canthony 47805a2d48e7e2ed7d699871183ed706699119281canthony/* 48805a2d48e7e2ed7d699871183ed706699119281canthony Include declarations. 49805a2d48e7e2ed7d699871183ed706699119281canthony*/ 50805a2d48e7e2ed7d699871183ed706699119281canthony#include "MagickWand/studio.h" 51805a2d48e7e2ed7d699871183ed706699119281canthony#include "MagickWand/MagickWand.h" 5272feaa664126c198b9ccd072b6ef181338a76c6canthony#include "MagickWand/magick-wand-private.h" 53d7df81dd631251802a3d70c5a929c81680c6a407cristy#include "MagickWand/mogrify.h" 5406f590165f0505d42005264893fe14a9e8a79986dirk#include "MagickWand/operation.h" 5543f425dd7d5b33887726982b28ebfa06f5560636anthony#include "MagickWand/wand.h" 56756cd0d228823ea405498ec6b2e9b8843beaca96anthony#include "MagickWand/wandcli.h" 57756cd0d228823ea405498ec6b2e9b8843beaca96anthony#include "MagickWand/wandcli-private.h" 58e66172d4abecdc0ecaf994a8f9e79ab4cd1ee97bcristy#include "MagickCore/image-private.h" 59805a2d48e7e2ed7d699871183ed706699119281canthony#include "MagickCore/monitor-private.h" 607a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#include "MagickCore/pixel-private.h" 6106f590165f0505d42005264893fe14a9e8a79986dirk#include "MagickCore/string-private.h" 6206f590165f0505d42005264893fe14a9e8a79986dirk#include "MagickCore/thread-private.h" 63805a2d48e7e2ed7d699871183ed706699119281canthony 64805a2d48e7e2ed7d699871183ed706699119281canthony/* 65d7df81dd631251802a3d70c5a929c81680c6a407cristy Constant declaration. 66d7df81dd631251802a3d70c5a929c81680c6a407cristy*/ 67d7df81dd631251802a3d70c5a929c81680c6a407cristystatic const char 68b797b2c96f796f4920c9ee807dc5f47e6f160418dirk MogrifyAlphaColor[] = "#bdbdbd", /* slightly darker gray */ 69d7df81dd631251802a3d70c5a929c81680c6a407cristy MogrifyBackgroundColor[] = "#fff", /* white */ 70b797b2c96f796f4920c9ee807dc5f47e6f160418dirk MogrifyBorderColor[] = "#dfdfdf"; /* sRGB gray */ 71d7df81dd631251802a3d70c5a929c81680c6a407cristy 72d7df81dd631251802a3d70c5a929c81680c6a407cristy/* 73805a2d48e7e2ed7d699871183ed706699119281canthony Define declarations. 74805a2d48e7e2ed7d699871183ed706699119281canthony*/ 75c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony#define USE_WAND_METHODS 1 76afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define MAX_STACK_DEPTH 32 77afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define UNDEFINED_COMPRESSION_QUALITY 0UL 78afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony 79b1d483a6a6a5678173db9d60bec52dd5a37826beanthony/* FUTURE: why is this default so specific? */ 80b1d483a6a6a5678173db9d60bec52dd5a37826beanthony#define DEFAULT_DISSIMILARITY_THRESHOLD "0.31830988618379067154" 81b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 8222de2722b682eb405b60ec6022a7546df994674eanthony/* For Debugging Geometry Input */ 8322de2722b682eb405b60ec6022a7546df994674eanthony#define ReportGeometry(flags,info) \ 8422de2722b682eb405b60ec6022a7546df994674eanthony (void) FormatLocaleFile(stderr, "Geometry = 0x%04X : %lg x %lg %+lg %+lg\n", \ 8522de2722b682eb405b60ec6022a7546df994674eanthony flags, info.rho, info.sigma, info.xi, info.psi ) 86805a2d48e7e2ed7d699871183ed706699119281canthony 87805a2d48e7e2ed7d699871183ed706699119281canthony/* 88805a2d48e7e2ed7d699871183ed706699119281canthony** Function to report on the progress of image operations 89805a2d48e7e2ed7d699871183ed706699119281canthony*/ 90805a2d48e7e2ed7d699871183ed706699119281canthonystatic MagickBooleanType MonitorProgress(const char *text, 91805a2d48e7e2ed7d699871183ed706699119281canthony const MagickOffsetType offset,const MagickSizeType extent, 92751a6671c9b7480f3672a7ef6aa6e392f064b46ddirk void *wand_unused(client_data)) 93805a2d48e7e2ed7d699871183ed706699119281canthony{ 94805a2d48e7e2ed7d699871183ed706699119281canthony char 95151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy message[MagickPathExtent], 96151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy tag[MagickPathExtent]; 97805a2d48e7e2ed7d699871183ed706699119281canthony 98805a2d48e7e2ed7d699871183ed706699119281canthony const char 99805a2d48e7e2ed7d699871183ed706699119281canthony *locale_message; 100805a2d48e7e2ed7d699871183ed706699119281canthony 101805a2d48e7e2ed7d699871183ed706699119281canthony register char 102805a2d48e7e2ed7d699871183ed706699119281canthony *p; 103805a2d48e7e2ed7d699871183ed706699119281canthony 104751a6671c9b7480f3672a7ef6aa6e392f064b46ddirk magick_unreferenced(client_data); 105751a6671c9b7480f3672a7ef6aa6e392f064b46ddirk 1065da2007c76eadcfef018a30848f826c9137c21ceCristy if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent)) 1075da2007c76eadcfef018a30848f826c9137c21ceCristy return(MagickTrue); 1085da2007c76eadcfef018a30848f826c9137c21ceCristy if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0)) 109805a2d48e7e2ed7d699871183ed706699119281canthony return(MagickTrue); 110bcaf9c53d9084f934212a67ca1ebf5abd2f17bbcCristy (void) CopyMagickString(tag,text,MagickPathExtent); 111805a2d48e7e2ed7d699871183ed706699119281canthony p=strrchr(tag,'/'); 112805a2d48e7e2ed7d699871183ed706699119281canthony if (p != (char *) NULL) 113805a2d48e7e2ed7d699871183ed706699119281canthony *p='\0'; 114151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(message,MagickPathExtent,"Monitor/%s",tag); 115805a2d48e7e2ed7d699871183ed706699119281canthony locale_message=GetLocaleMessage(message); 116805a2d48e7e2ed7d699871183ed706699119281canthony if (locale_message == message) 117805a2d48e7e2ed7d699871183ed706699119281canthony locale_message=tag; 118805a2d48e7e2ed7d699871183ed706699119281canthony if (p == (char *) NULL) 119805a2d48e7e2ed7d699871183ed706699119281canthony (void) FormatLocaleFile(stderr,"%s: %ld of %lu, %02ld%% complete\r", 120805a2d48e7e2ed7d699871183ed706699119281canthony locale_message,(long) offset,(unsigned long) extent,(long) 121805a2d48e7e2ed7d699871183ed706699119281canthony (100L*offset/(extent-1))); 122805a2d48e7e2ed7d699871183ed706699119281canthony else 123805a2d48e7e2ed7d699871183ed706699119281canthony (void) FormatLocaleFile(stderr,"%s[%s]: %ld of %lu, %02ld%% complete\r", 124805a2d48e7e2ed7d699871183ed706699119281canthony locale_message,p+1,(long) offset,(unsigned long) extent,(long) 125805a2d48e7e2ed7d699871183ed706699119281canthony (100L*offset/(extent-1))); 126805a2d48e7e2ed7d699871183ed706699119281canthony if (offset == (MagickOffsetType) (extent-1)) 127805a2d48e7e2ed7d699871183ed706699119281canthony (void) FormatLocaleFile(stderr,"\n"); 128805a2d48e7e2ed7d699871183ed706699119281canthony (void) fflush(stderr); 129805a2d48e7e2ed7d699871183ed706699119281canthony return(MagickTrue); 130805a2d48e7e2ed7d699871183ed706699119281canthony} 131805a2d48e7e2ed7d699871183ed706699119281canthony 132805a2d48e7e2ed7d699871183ed706699119281canthony/* 133805a2d48e7e2ed7d699871183ed706699119281canthony** GetImageCache() will read an image into a image cache if not already 134805a2d48e7e2ed7d699871183ed706699119281canthony** present then return the image that is in the cache under that filename. 135805a2d48e7e2ed7d699871183ed706699119281canthony*/ 136805a2d48e7e2ed7d699871183ed706699119281canthonystatic inline Image *GetImageCache(const ImageInfo *image_info,const char *path, 137805a2d48e7e2ed7d699871183ed706699119281canthony ExceptionInfo *exception) 138805a2d48e7e2ed7d699871183ed706699119281canthony{ 139805a2d48e7e2ed7d699871183ed706699119281canthony char 140151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy key[MagickPathExtent]; 141805a2d48e7e2ed7d699871183ed706699119281canthony 142805a2d48e7e2ed7d699871183ed706699119281canthony ExceptionInfo 143805a2d48e7e2ed7d699871183ed706699119281canthony *sans_exception; 144805a2d48e7e2ed7d699871183ed706699119281canthony 145805a2d48e7e2ed7d699871183ed706699119281canthony Image 146805a2d48e7e2ed7d699871183ed706699119281canthony *image; 147805a2d48e7e2ed7d699871183ed706699119281canthony 148805a2d48e7e2ed7d699871183ed706699119281canthony ImageInfo 149805a2d48e7e2ed7d699871183ed706699119281canthony *read_info; 150805a2d48e7e2ed7d699871183ed706699119281canthony 151151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(key,MagickPathExtent,"cache:%s",path); 152805a2d48e7e2ed7d699871183ed706699119281canthony sans_exception=AcquireExceptionInfo(); 153805a2d48e7e2ed7d699871183ed706699119281canthony image=(Image *) GetImageRegistry(ImageRegistryType,key,sans_exception); 154805a2d48e7e2ed7d699871183ed706699119281canthony sans_exception=DestroyExceptionInfo(sans_exception); 155805a2d48e7e2ed7d699871183ed706699119281canthony if (image != (Image *) NULL) 156805a2d48e7e2ed7d699871183ed706699119281canthony return(image); 157805a2d48e7e2ed7d699871183ed706699119281canthony read_info=CloneImageInfo(image_info); 1584d246fc57cf90dc0ac7addcd8192d5c013fce640cristy if (path != (const char *) NULL) 159151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) CopyMagickString(read_info->filename,path,MagickPathExtent); 160805a2d48e7e2ed7d699871183ed706699119281canthony image=ReadImage(read_info,exception); 161805a2d48e7e2ed7d699871183ed706699119281canthony read_info=DestroyImageInfo(read_info); 162805a2d48e7e2ed7d699871183ed706699119281canthony if (image != (Image *) NULL) 163805a2d48e7e2ed7d699871183ed706699119281canthony (void) SetImageRegistry(ImageRegistryType,key,image,exception); 164805a2d48e7e2ed7d699871183ed706699119281canthony return(image); 165805a2d48e7e2ed7d699871183ed706699119281canthony} 166805a2d48e7e2ed7d699871183ed706699119281canthony 167756cd0d228823ea405498ec6b2e9b8843beaca96anthony/* 168a89dd1754cb0d91d27735def18faff913a369be4anthony SparseColorOption() parse the complex -sparse-color argument into an 169a89dd1754cb0d91d27735def18faff913a369be4anthony an array of floating point values than call SparseColorImage(). 170a89dd1754cb0d91d27735def18faff913a369be4anthony Argument is a complex mix of floating-point pixel coodinates, and color 171a89dd1754cb0d91d27735def18faff913a369be4anthony specifications (or direct floating point numbers). The number of floats 1724023b26911e4aaaee0e84cdda641b020efd88795anthony needed to represent a color varies depending on the current channel 173a89dd1754cb0d91d27735def18faff913a369be4anthony setting. 17443f425dd7d5b33887726982b28ebfa06f5560636anthony 17543f425dd7d5b33887726982b28ebfa06f5560636anthony This really should be in MagickCore, so that other API's can make use of it. 176805a2d48e7e2ed7d699871183ed706699119281canthony*/ 177805a2d48e7e2ed7d699871183ed706699119281canthonystatic Image *SparseColorOption(const Image *image, 178ab9435990dd6a881f2055aee7562d3de4dabc01dcristy const SparseColorMethod method,const char *arguments,ExceptionInfo *exception) 179805a2d48e7e2ed7d699871183ed706699119281canthony{ 180805a2d48e7e2ed7d699871183ed706699119281canthony char 181151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy token[MagickPathExtent]; 182805a2d48e7e2ed7d699871183ed706699119281canthony 183805a2d48e7e2ed7d699871183ed706699119281canthony const char 184805a2d48e7e2ed7d699871183ed706699119281canthony *p; 185805a2d48e7e2ed7d699871183ed706699119281canthony 186805a2d48e7e2ed7d699871183ed706699119281canthony double 187805a2d48e7e2ed7d699871183ed706699119281canthony *sparse_arguments; 188805a2d48e7e2ed7d699871183ed706699119281canthony 189805a2d48e7e2ed7d699871183ed706699119281canthony Image 190805a2d48e7e2ed7d699871183ed706699119281canthony *sparse_image; 191805a2d48e7e2ed7d699871183ed706699119281canthony 192805a2d48e7e2ed7d699871183ed706699119281canthony PixelInfo 193805a2d48e7e2ed7d699871183ed706699119281canthony color; 194805a2d48e7e2ed7d699871183ed706699119281canthony 195805a2d48e7e2ed7d699871183ed706699119281canthony MagickBooleanType 196805a2d48e7e2ed7d699871183ed706699119281canthony error; 197805a2d48e7e2ed7d699871183ed706699119281canthony 198805a2d48e7e2ed7d699871183ed706699119281canthony register size_t 199805a2d48e7e2ed7d699871183ed706699119281canthony x; 200805a2d48e7e2ed7d699871183ed706699119281canthony 201805a2d48e7e2ed7d699871183ed706699119281canthony size_t 202805a2d48e7e2ed7d699871183ed706699119281canthony number_arguments, 203805a2d48e7e2ed7d699871183ed706699119281canthony number_colors; 204805a2d48e7e2ed7d699871183ed706699119281canthony 205805a2d48e7e2ed7d699871183ed706699119281canthony assert(image != (Image *) NULL); 206e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 207360b9862931889fd536b16ce88018c2e58c8619fdirk if (image->debug != MagickFalse) 208805a2d48e7e2ed7d699871183ed706699119281canthony (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 209805a2d48e7e2ed7d699871183ed706699119281canthony assert(exception != (ExceptionInfo *) NULL); 210e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(exception->signature == MagickCoreSignature); 211805a2d48e7e2ed7d699871183ed706699119281canthony /* 212b1d483a6a6a5678173db9d60bec52dd5a37826beanthony Limit channels according to image 213b1d483a6a6a5678173db9d60bec52dd5a37826beanthony add up number of values needed per color. 214805a2d48e7e2ed7d699871183ed706699119281canthony */ 215805a2d48e7e2ed7d699871183ed706699119281canthony number_colors=0; 216805a2d48e7e2ed7d699871183ed706699119281canthony if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) 217805a2d48e7e2ed7d699871183ed706699119281canthony number_colors++; 218805a2d48e7e2ed7d699871183ed706699119281canthony if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) 219805a2d48e7e2ed7d699871183ed706699119281canthony number_colors++; 220805a2d48e7e2ed7d699871183ed706699119281canthony if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) 221805a2d48e7e2ed7d699871183ed706699119281canthony number_colors++; 222805a2d48e7e2ed7d699871183ed706699119281canthony if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && 223805a2d48e7e2ed7d699871183ed706699119281canthony (image->colorspace == CMYKColorspace)) 224805a2d48e7e2ed7d699871183ed706699119281canthony number_colors++; 225805a2d48e7e2ed7d699871183ed706699119281canthony if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) && 2267d6d3d842e19316bdf35c69a032cd77a40f476aacristy image->alpha_trait != UndefinedPixelTrait) 227805a2d48e7e2ed7d699871183ed706699119281canthony number_colors++; 228805a2d48e7e2ed7d699871183ed706699119281canthony 229805a2d48e7e2ed7d699871183ed706699119281canthony /* 230805a2d48e7e2ed7d699871183ed706699119281canthony Read string, to determine number of arguments needed, 231805a2d48e7e2ed7d699871183ed706699119281canthony */ 232805a2d48e7e2ed7d699871183ed706699119281canthony p=arguments; 233805a2d48e7e2ed7d699871183ed706699119281canthony x=0; 234805a2d48e7e2ed7d699871183ed706699119281canthony while( *p != '\0' ) 235805a2d48e7e2ed7d699871183ed706699119281canthony { 2368bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); 237805a2d48e7e2ed7d699871183ed706699119281canthony if ( token[0] == ',' ) continue; 23831f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( isalpha((int) token[0]) || token[0] == '#' ) 23931f1bf7bb6ee2698a2afab42ee0329b11663636canthony x += number_colors; /* color argument found */ 240ce8dcb373b5775027f54bfea92a0cd5a47b192bcanthony else 241805a2d48e7e2ed7d699871183ed706699119281canthony x++; /* floating point argument */ 242805a2d48e7e2ed7d699871183ed706699119281canthony } 24331f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* control points and color values */ 244b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if ((x % (2+number_colors)) != 0) 245b9dbc296c59e91df014757130b4e584c7fb6c74ddirk { 246b9dbc296c59e91df014757130b4e584c7fb6c74ddirk (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 247b9dbc296c59e91df014757130b4e584c7fb6c74ddirk "InvalidArgument","'%s': %s", "sparse-color", 248b9dbc296c59e91df014757130b4e584c7fb6c74ddirk "Invalid number of Arguments"); 249b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return( (Image *) NULL); 250b9dbc296c59e91df014757130b4e584c7fb6c74ddirk } 251b9dbc296c59e91df014757130b4e584c7fb6c74ddirk error=MagickFalse; 25231f1bf7bb6ee2698a2afab42ee0329b11663636canthony number_arguments=x; 253805a2d48e7e2ed7d699871183ed706699119281canthony 254805a2d48e7e2ed7d699871183ed706699119281canthony /* Allocate and fill in the floating point arguments */ 255805a2d48e7e2ed7d699871183ed706699119281canthony sparse_arguments=(double *) AcquireQuantumMemory(number_arguments, 256805a2d48e7e2ed7d699871183ed706699119281canthony sizeof(*sparse_arguments)); 257805a2d48e7e2ed7d699871183ed706699119281canthony if (sparse_arguments == (double *) NULL) { 258805a2d48e7e2ed7d699871183ed706699119281canthony (void) ThrowMagickException(exception,GetMagickModule(),ResourceLimitError, 259805a2d48e7e2ed7d699871183ed706699119281canthony "MemoryAllocationFailed","%s","SparseColorOption"); 260f432c635c526259b858c9aad3d409c5c44545686cristy return( (Image *) NULL); 261805a2d48e7e2ed7d699871183ed706699119281canthony } 262805a2d48e7e2ed7d699871183ed706699119281canthony (void) ResetMagickMemory(sparse_arguments,0,number_arguments* 263805a2d48e7e2ed7d699871183ed706699119281canthony sizeof(*sparse_arguments)); 264805a2d48e7e2ed7d699871183ed706699119281canthony p=arguments; 265805a2d48e7e2ed7d699871183ed706699119281canthony x=0; 266805a2d48e7e2ed7d699871183ed706699119281canthony while( *p != '\0' && x < number_arguments ) { 267805a2d48e7e2ed7d699871183ed706699119281canthony /* X coordinate */ 2688bedb4edca01599dfd0612cb0daa35b09c67d736Cristy token[0]=','; while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 269805a2d48e7e2ed7d699871183ed706699119281canthony if ( token[0] == '\0' ) break; 270805a2d48e7e2ed7d699871183ed706699119281canthony if ( isalpha((int) token[0]) || token[0] == '#' ) { 271805a2d48e7e2ed7d699871183ed706699119281canthony (void) ThrowMagickException(exception,GetMagickModule(), 27243f425dd7d5b33887726982b28ebfa06f5560636anthony OptionError, "InvalidArgument", "'%s': %s", "sparse-color", 273805a2d48e7e2ed7d699871183ed706699119281canthony "Color found, instead of X-coord"); 274b9dbc296c59e91df014757130b4e584c7fb6c74ddirk error=MagickTrue; 275805a2d48e7e2ed7d699871183ed706699119281canthony break; 276805a2d48e7e2ed7d699871183ed706699119281canthony } 277dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 278805a2d48e7e2ed7d699871183ed706699119281canthony /* Y coordinate */ 2798bedb4edca01599dfd0612cb0daa35b09c67d736Cristy token[0]=','; while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 280805a2d48e7e2ed7d699871183ed706699119281canthony if ( token[0] == '\0' ) break; 281805a2d48e7e2ed7d699871183ed706699119281canthony if ( isalpha((int) token[0]) || token[0] == '#' ) { 282805a2d48e7e2ed7d699871183ed706699119281canthony (void) ThrowMagickException(exception,GetMagickModule(), 28343f425dd7d5b33887726982b28ebfa06f5560636anthony OptionError, "InvalidArgument", "'%s': %s", "sparse-color", 284805a2d48e7e2ed7d699871183ed706699119281canthony "Color found, instead of Y-coord"); 285b9dbc296c59e91df014757130b4e584c7fb6c74ddirk error=MagickTrue; 286805a2d48e7e2ed7d699871183ed706699119281canthony break; 287805a2d48e7e2ed7d699871183ed706699119281canthony } 288dbdd0e35efc03c9bccda644f5407db38b7c17eeccristy sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 28931f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* color name or function given in string argument */ 2908bedb4edca01599dfd0612cb0daa35b09c67d736Cristy token[0]=','; while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 29131f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( token[0] == '\0' ) break; 29231f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( isalpha((int) token[0]) || token[0] == '#' ) { 29331f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* Color string given */ 29431f1bf7bb6ee2698a2afab42ee0329b11663636canthony (void) QueryColorCompliance(token,AllCompliance,&color, 29531f1bf7bb6ee2698a2afab42ee0329b11663636canthony exception); 29631f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) 29731f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++] = QuantumScale*color.red; 29831f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) 29931f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++] = QuantumScale*color.green; 30031f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) 30131f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++] = QuantumScale*color.blue; 30231f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && 30331f1bf7bb6ee2698a2afab42ee0329b11663636canthony (image->colorspace == CMYKColorspace)) 30431f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++] = QuantumScale*color.black; 30531f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) && 3067d6d3d842e19316bdf35c69a032cd77a40f476aacristy image->alpha_trait != UndefinedPixelTrait) 30731f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++] = QuantumScale*color.alpha; 308805a2d48e7e2ed7d699871183ed706699119281canthony } 30931f1bf7bb6ee2698a2afab42ee0329b11663636canthony else { 31031f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* Colors given as a set of floating point values - experimental */ 31131f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* NB: token contains the first floating point value to use! */ 31231f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0) 31331f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 3148bedb4edca01599dfd0612cb0daa35b09c67d736Cristy while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 31531f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' ) 31631f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 31731f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 31831f1bf7bb6ee2698a2afab42ee0329b11663636canthony token[0] = ','; /* used this token - get another */ 319805a2d48e7e2ed7d699871183ed706699119281canthony } 32031f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ((GetPixelGreenTraits(image) & UpdatePixelTrait) != 0) 32131f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 3228bedb4edca01599dfd0612cb0daa35b09c67d736Cristy while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 32331f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' ) 32431f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 32531f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 32631f1bf7bb6ee2698a2afab42ee0329b11663636canthony token[0] = ','; /* used this token - get another */ 32731f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 32831f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ((GetPixelBlueTraits(image) & UpdatePixelTrait) != 0) 32931f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 3308bedb4edca01599dfd0612cb0daa35b09c67d736Cristy while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 33131f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' ) 33231f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 33331f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 33431f1bf7bb6ee2698a2afab42ee0329b11663636canthony token[0] = ','; /* used this token - get another */ 33531f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 33631f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (((GetPixelBlackTraits(image) & UpdatePixelTrait) != 0) && 33731f1bf7bb6ee2698a2afab42ee0329b11663636canthony (image->colorspace == CMYKColorspace)) 33831f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 3398bedb4edca01599dfd0612cb0daa35b09c67d736Cristy while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 34031f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' ) 34131f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 34231f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 34331f1bf7bb6ee2698a2afab42ee0329b11663636canthony token[0] = ','; /* used this token - get another */ 34431f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 34531f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (((GetPixelAlphaTraits(image) & UpdatePixelTrait) != 0) && 3467d6d3d842e19316bdf35c69a032cd77a40f476aacristy image->alpha_trait != UndefinedPixelTrait) 34731f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 3488bedb4edca01599dfd0612cb0daa35b09c67d736Cristy while ( token[0] == ',' ) GetNextToken(p,&p,MagickPathExtent,token); 34931f1bf7bb6ee2698a2afab42ee0329b11663636canthony if ( token[0] == '\0' || isalpha((int)token[0]) || token[0] == '#' ) 35031f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 35131f1bf7bb6ee2698a2afab42ee0329b11663636canthony sparse_arguments[x++]=StringToDouble(token,(char **) NULL); 35231f1bf7bb6ee2698a2afab42ee0329b11663636canthony token[0] = ','; /* used this token - get another */ 353805a2d48e7e2ed7d699871183ed706699119281canthony } 354805a2d48e7e2ed7d699871183ed706699119281canthony } 355805a2d48e7e2ed7d699871183ed706699119281canthony } 356b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (error != MagickFalse) 357b9dbc296c59e91df014757130b4e584c7fb6c74ddirk { 358b9dbc296c59e91df014757130b4e584c7fb6c74ddirk sparse_arguments=(double *) RelinquishMagickMemory(sparse_arguments); 359b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return((Image *) NULL); 360b9dbc296c59e91df014757130b4e584c7fb6c74ddirk } 361b9dbc296c59e91df014757130b4e584c7fb6c74ddirk if (number_arguments != x) 362b9dbc296c59e91df014757130b4e584c7fb6c74ddirk { 363b9dbc296c59e91df014757130b4e584c7fb6c74ddirk sparse_arguments=(double *) RelinquishMagickMemory(sparse_arguments); 364b9dbc296c59e91df014757130b4e584c7fb6c74ddirk (void) ThrowMagickException(exception,GetMagickModule(),OptionError, 365b9dbc296c59e91df014757130b4e584c7fb6c74ddirk "InvalidArgument","'%s': %s","sparse-color","Argument Parsing Error"); 366b9dbc296c59e91df014757130b4e584c7fb6c74ddirk return((Image *) NULL); 367b9dbc296c59e91df014757130b4e584c7fb6c74ddirk } 36831f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* Call the Sparse Color Interpolation function with the parsed arguments */ 369805a2d48e7e2ed7d699871183ed706699119281canthony sparse_image=SparseColorImage(image,method,number_arguments,sparse_arguments, 370805a2d48e7e2ed7d699871183ed706699119281canthony exception); 371805a2d48e7e2ed7d699871183ed706699119281canthony sparse_arguments=(double *) RelinquishMagickMemory(sparse_arguments); 372805a2d48e7e2ed7d699871183ed706699119281canthony return( sparse_image ); 373805a2d48e7e2ed7d699871183ed706699119281canthony} 374805a2d48e7e2ed7d699871183ed706699119281canthony 375805a2d48e7e2ed7d699871183ed706699119281canthony/* 376805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 377805a2d48e7e2ed7d699871183ed706699119281canthony% % 378805a2d48e7e2ed7d699871183ed706699119281canthony% % 379805a2d48e7e2ed7d699871183ed706699119281canthony% % 380464f1c476517436723780b8a8bb371464584453canthony% C L I S e t t i n g O p t i o n I n f o % 38143f425dd7d5b33887726982b28ebfa06f5560636anthony% % 38243f425dd7d5b33887726982b28ebfa06f5560636anthony% % 38343f425dd7d5b33887726982b28ebfa06f5560636anthony% % 38443f425dd7d5b33887726982b28ebfa06f5560636anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38543f425dd7d5b33887726982b28ebfa06f5560636anthony% 38643f425dd7d5b33887726982b28ebfa06f5560636anthony% CLISettingOptionInfo() applies a single settings option into a CLI wand 387dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony% holding the image_info, draw_info, quantize_info structures that will be 38843f425dd7d5b33887726982b28ebfa06f5560636anthony% used when processing the images. 3891afdc7ad27c38cee6623faefd0a64a0e0c185febanthony% 39043f425dd7d5b33887726982b28ebfa06f5560636anthony% These options do no require images to be present in the CLI wand for them 39143f425dd7d5b33887726982b28ebfa06f5560636anthony% to be able to be set, in which case they will generally be applied to image 39243f425dd7d5b33887726982b28ebfa06f5560636anthony% that are read in later 39380c3775de081817d58849ae9ded5325d397fb1acanthony% 39480c3775de081817d58849ae9ded5325d397fb1acanthony% Options handled by this function are listed in CommandOptions[] of 395fd706f930f397221c6ba26f112e96e262fb0ba2eanthony% "option.c" that is one of "SettingOptionFlags" option flags. 396805a2d48e7e2ed7d699871183ed706699119281canthony% 3972052d27d92125fd91005c0a737a1a950d8163047anthony% The format of the CLISettingOptionInfo method is: 398805a2d48e7e2ed7d699871183ed706699119281canthony% 399afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony% void CLISettingOptionInfo(MagickCLI *cli_wand, 400e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony% const char *option, const char *arg1, const char *arg2) 401805a2d48e7e2ed7d699871183ed706699119281canthony% 402805a2d48e7e2ed7d699871183ed706699119281canthony% A description of each parameter follows: 403805a2d48e7e2ed7d699871183ed706699119281canthony% 40443f425dd7d5b33887726982b28ebfa06f5560636anthony% o cli_wand: structure holding settings to be applied 405805a2d48e7e2ed7d699871183ed706699119281canthony% 406dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony% o option: The option string to be set 407805a2d48e7e2ed7d699871183ed706699119281canthony% 408e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony% o arg1, arg2: optional argument strings to the operation 409e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony% arg2 is currently only used by "-limit" 410dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony% 411805a2d48e7e2ed7d699871183ed706699119281canthony*/ 412fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate void CLISettingOptionInfo(MagickCLI *cli_wand, 413a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char *option,const char *arg1n, const char *arg2n) 414805a2d48e7e2ed7d699871183ed706699119281canthony{ 41530b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony ssize_t 41630b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony parse; /* option argument parsing (string to value table lookup) */ 41730b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony 418a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char /* percent escaped versions of the args */ 419a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony *arg1, 420a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony *arg2; 42143f425dd7d5b33887726982b28ebfa06f5560636anthony 4222e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _image_info (cli_wand->wand.image_info) 423a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _image (cli_wand->wand.images) 4242e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _exception (cli_wand->wand.exception) 4252e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _draw_info (cli_wand->draw_info) 4262e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _quantize_info (cli_wand->quantize_info) 42724aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#define IfSetOption (*option=='-') 428b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define ArgBoolean IfSetOption ? MagickTrue : MagickFalse 429b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define ArgBooleanNot IfSetOption ? MagickFalse : MagickTrue 43024aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#define ArgBooleanString (IfSetOption?"true":"false") 43124aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#define ArgOption(def) (IfSetOption?arg1:(const char *)(def)) 43274b1cfc16264081b41a57f6287d72283c8881f0aanthony 433a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony assert(cli_wand != (MagickCLI *) NULL); 434e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->signature == MagickWandSignature); 435e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->wand.signature == MagickWandSignature); 436a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 437d0792939dc18eff319129903f2627bd882a574aadirk if (cli_wand->wand.debug != MagickFalse) 438a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(), 439a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony "- Setting Option: %s \"%s\" \"%s\"", option,arg1n,arg2n); 440a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 441a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1 = arg1n, 442a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2 = arg2n; 4434837ac2f5e9dbb766129a91aa11cf7c547477119anthony 444a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#if 1 4454837ac2f5e9dbb766129a91aa11cf7c547477119anthony#define _process_flags (cli_wand->process_flags) 4464837ac2f5e9dbb766129a91aa11cf7c547477119anthony#define _option_type ((CommandOptionFlags) cli_wand->command->flags) 4474837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Interpret Percent Escapes in Arguments - using first image */ 4484837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( (((_process_flags & ProcessInterpretProperities) != 0 ) 4494837ac2f5e9dbb766129a91aa11cf7c547477119anthony || ((_option_type & AlwaysInterpretArgsFlag) != 0) 4504837ac2f5e9dbb766129a91aa11cf7c547477119anthony ) && ((_option_type & NeverInterpretArgsFlag) == 0) ) { 4514837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Interpret Percent escapes in argument 1 */ 4524837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg1n != (char *) NULL) { 4534837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg1=InterpretImageProperties(_image_info,_image,arg1n,_exception); 4544837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg1 == (char *) NULL) { 4554837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 4564837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg1=arg1n; /* use the given argument as is */ 4574837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 4584837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 4594837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg2n != (char *) NULL) { 4604837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg2=InterpretImageProperties(_image_info,_image,arg2n,_exception); 4614837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg2 == (char *) NULL) { 4624837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 4634837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg2=arg2n; /* use the given argument as is */ 4644837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 4654837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 4664837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 4674837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags 4684837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _option_type 4694837ac2f5e9dbb766129a91aa11cf7c547477119anthony#endif 4704837ac2f5e9dbb766129a91aa11cf7c547477119anthony 471afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony switch (*(option+1)) 472805a2d48e7e2ed7d699871183ed706699119281canthony { 473805a2d48e7e2ed7d699871183ed706699119281canthony case 'a': 474805a2d48e7e2ed7d699871183ed706699119281canthony { 475afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("adjoin",option+1) == 0) 476805a2d48e7e2ed7d699871183ed706699119281canthony { 47792c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->adjoin = ArgBoolean; 478805a2d48e7e2ed7d699871183ed706699119281canthony break; 479805a2d48e7e2ed7d699871183ed706699119281canthony } 480afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("affine",option+1) == 0) 4811afdc7ad27c38cee6623faefd0a64a0e0c185febanthony { 482464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-draw 'affine ...'"); 48374b1cfc16264081b41a57f6287d72283c8881f0aanthony if (IfSetOption) 48492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseAffineGeometry(arg1,&_draw_info->affine,_exception); 48574b1cfc16264081b41a57f6287d72283c8881f0aanthony else 48692c93bd35e207736d340f1b32000006a5bf6208eanthony GetAffineMatrix(&_draw_info->affine); 4871afdc7ad27c38cee6623faefd0a64a0e0c185febanthony break; 4881afdc7ad27c38cee6623faefd0a64a0e0c185febanthony } 489b797b2c96f796f4920c9ee807dc5f47e6f160418dirk if (LocaleCompare("alpha-color",option+1) == 0) 490b797b2c96f796f4920c9ee807dc5f47e6f160418dirk { 491b797b2c96f796f4920c9ee807dc5f47e6f160418dirk /* SyncImageSettings() used to set per-image attribute. */ 492b797b2c96f796f4920c9ee807dc5f47e6f160418dirk (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 493b797b2c96f796f4920c9ee807dc5f47e6f160418dirk (void) QueryColorCompliance(ArgOption(MogrifyAlphaColor),AllCompliance, 494b797b2c96f796f4920c9ee807dc5f47e6f160418dirk &_image_info->alpha_color,_exception); 495b797b2c96f796f4920c9ee807dc5f47e6f160418dirk break; 496b797b2c96f796f4920c9ee807dc5f47e6f160418dirk } 497afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("antialias",option+1) == 0) 498805a2d48e7e2ed7d699871183ed706699119281canthony { 49992c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->antialias = 50092c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->stroke_antialias = 50192c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->text_antialias = ArgBoolean; 502805a2d48e7e2ed7d699871183ed706699119281canthony break; 503805a2d48e7e2ed7d699871183ed706699119281canthony } 50431f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (LocaleCompare("attenuate",option+1) == 0) 50531f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 5065d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 50792c93bd35e207736d340f1b32000006a5bf6208eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 50892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption("1.0")); 50931f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 51031f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 511afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("authenticate",option+1) == 0) 512dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony { 51392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 514805a2d48e7e2ed7d699871183ed706699119281canthony break; 515805a2d48e7e2ed7d699871183ed706699119281canthony } 516ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 517805a2d48e7e2ed7d699871183ed706699119281canthony } 518805a2d48e7e2ed7d699871183ed706699119281canthony case 'b': 519805a2d48e7e2ed7d699871183ed706699119281canthony { 520afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("background",option+1) == 0) 521805a2d48e7e2ed7d699871183ed706699119281canthony { 52292c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: both _image_info attribute & ImageOption in use! 52392c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info only used directly for generating new images. 52472feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 52572feaa664126c198b9ccd072b6ef181338a76c6canthony 52692c93bd35e207736d340f1b32000006a5bf6208eanthony FUTURE: if _image_info->background_color is not set then 52730b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony we should fall back to per-image background_color 52830b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony 52930b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony At this time -background will 'wipe out' the per-image 53030b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony background color! 53130b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony 53230b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony Better error handling of QueryColorCompliance() needed. 53374b1cfc16264081b41a57f6287d72283c8881f0aanthony */ 53492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 535d7df81dd631251802a3d70c5a929c81680c6a407cristy (void) QueryColorCompliance(ArgOption(MogrifyBackgroundColor),AllCompliance, 53692c93bd35e207736d340f1b32000006a5bf6208eanthony &_image_info->background_color,_exception); 537805a2d48e7e2ed7d699871183ed706699119281canthony break; 538805a2d48e7e2ed7d699871183ed706699119281canthony } 539afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("bias",option+1) == 0) 540805a2d48e7e2ed7d699871183ed706699119281canthony { 54152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony /* FUTURE: bias OBSOLETED, replaced by Artifact "convolve:bias" 54231f1bf7bb6ee2698a2afab42ee0329b11663636canthony as it is actually rarely used except in direct convolve operations 54331f1bf7bb6ee2698a2afab42ee0329b11663636canthony Usage outside a direct convolve operation is actally non-sensible! 54472feaa664126c198b9ccd072b6ef181338a76c6canthony 54572feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 54674b1cfc16264081b41a57f6287d72283c8881f0aanthony */ 5475d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 5485330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 549f46d42620631d2581e0b6a56456e203e17c427c8anthony (void) SetImageOption(_image_info,"convolve:bias",ArgOption(NULL)); 550805a2d48e7e2ed7d699871183ed706699119281canthony break; 551805a2d48e7e2ed7d699871183ed706699119281canthony } 552afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("black-point-compensation",option+1) == 0) 553805a2d48e7e2ed7d699871183ed706699119281canthony { 55472feaa664126c198b9ccd072b6ef181338a76c6canthony /* Used as a image chromaticity setting 55572feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 55672feaa664126c198b9ccd072b6ef181338a76c6canthony */ 55792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgBooleanString); 558805a2d48e7e2ed7d699871183ed706699119281canthony break; 559805a2d48e7e2ed7d699871183ed706699119281canthony } 560afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("blue-primary",option+1) == 0) 561805a2d48e7e2ed7d699871183ed706699119281canthony { 562afbaed757145095f09d6d614653ed3b58068cb3banthony /* Image chromaticity X,Y NB: Y=X if Y not defined 563afbaed757145095f09d6d614653ed3b58068cb3banthony Used by many coders including PNG 56472feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 565afbaed757145095f09d6d614653ed3b58068cb3banthony */ 566f42014dc55e8d21355ea3d17372e2d9c14b07641anthony arg1=ArgOption("0.0"); 5675d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 5685330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 569f42014dc55e8d21355ea3d17372e2d9c14b07641anthony (void) SetImageOption(_image_info,option+1,arg1); 570805a2d48e7e2ed7d699871183ed706699119281canthony break; 571805a2d48e7e2ed7d699871183ed706699119281canthony } 572afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("bordercolor",option+1) == 0) 573805a2d48e7e2ed7d699871183ed706699119281canthony { 57492c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: both _image_info attribute & ImageOption in use! 57572feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 57630b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony Better error checking of QueryColorCompliance(). 57772feaa664126c198b9ccd072b6ef181338a76c6canthony */ 57874b1cfc16264081b41a57f6287d72283c8881f0aanthony if (IfSetOption) 579805a2d48e7e2ed7d699871183ed706699119281canthony { 58092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,arg1); 58124aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony (void) QueryColorCompliance(arg1,AllCompliance, 58292c93bd35e207736d340f1b32000006a5bf6208eanthony &_image_info->border_color,_exception); 58324aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony (void) QueryColorCompliance(arg1,AllCompliance, 58492c93bd35e207736d340f1b32000006a5bf6208eanthony &_draw_info->border_color,_exception); 585805a2d48e7e2ed7d699871183ed706699119281canthony break; 586805a2d48e7e2ed7d699871183ed706699119281canthony } 58792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) DeleteImageOption(_image_info,option+1); 588d7df81dd631251802a3d70c5a929c81680c6a407cristy (void) QueryColorCompliance(MogrifyBorderColor,AllCompliance, 58992c93bd35e207736d340f1b32000006a5bf6208eanthony &_image_info->border_color,_exception); 590d7df81dd631251802a3d70c5a929c81680c6a407cristy (void) QueryColorCompliance(MogrifyBorderColor,AllCompliance, 59192c93bd35e207736d340f1b32000006a5bf6208eanthony &_draw_info->border_color,_exception); 592805a2d48e7e2ed7d699871183ed706699119281canthony break; 593805a2d48e7e2ed7d699871183ed706699119281canthony } 594afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("box",option+1) == 0) 595805a2d48e7e2ed7d699871183ed706699119281canthony { 596464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-undercolor"); 597975a8d7aba7678845112e4d2c5a155011f35a3abanthony CLISettingOptionInfo(cli_wand,"-undercolor",arg1, arg2); 598fd706f930f397221c6ba26f112e96e262fb0ba2eanthony break; 599805a2d48e7e2ed7d699871183ed706699119281canthony } 600ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 601805a2d48e7e2ed7d699871183ed706699119281canthony } 602805a2d48e7e2ed7d699871183ed706699119281canthony case 'c': 603805a2d48e7e2ed7d699871183ed706699119281canthony { 604afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("cache",option+1) == 0) 605805a2d48e7e2ed7d699871183ed706699119281canthony { 606805a2d48e7e2ed7d699871183ed706699119281canthony MagickSizeType 607805a2d48e7e2ed7d699871183ed706699119281canthony limit; 608805a2d48e7e2ed7d699871183ed706699119281canthony 6095d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 6105330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 611805a2d48e7e2ed7d699871183ed706699119281canthony limit=MagickResourceInfinity; 61224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony if (LocaleCompare("unlimited",arg1) != 0) 61324aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony limit=(MagickSizeType) SiPrefixToDoubleInterval(arg1,100.0); 614805a2d48e7e2ed7d699871183ed706699119281canthony (void) SetMagickResourceLimit(MemoryResource,limit); 615805a2d48e7e2ed7d699871183ed706699119281canthony (void) SetMagickResourceLimit(MapResource,2*limit); 616805a2d48e7e2ed7d699871183ed706699119281canthony break; 617805a2d48e7e2ed7d699871183ed706699119281canthony } 618afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("caption",option+1) == 0) 619805a2d48e7e2ed7d699871183ed706699119281canthony { 62092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 621805a2d48e7e2ed7d699871183ed706699119281canthony break; 622805a2d48e7e2ed7d699871183ed706699119281canthony } 623afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("colorspace",option+1) == 0) 624805a2d48e7e2ed7d699871183ed706699119281canthony { 625afbaed757145095f09d6d614653ed3b58068cb3banthony /* Setting used for new images via AquireImage() 626afbaed757145095f09d6d614653ed3b58068cb3banthony But also used as a SimpleImageOperator 627afbaed757145095f09d6d614653ed3b58068cb3banthony Undefined colorspace means don't modify images on 628afbaed757145095f09d6d614653ed3b58068cb3banthony read or as a operation */ 62917ada024a8d39285affcac96ff344f3142c41aadcristy parse=ParseCommandOption(MagickColorspaceOptions,MagickFalse, 63017ada024a8d39285affcac96ff344f3142c41aadcristy ArgOption("undefined")); 63130b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony if (parse < 0) 63217ada024a8d39285affcac96ff344f3142c41aadcristy CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace",option, 63317ada024a8d39285affcac96ff344f3142c41aadcristy arg1); 63430b912a2e6ab7573f58f0e532e47aff4bccfdaa9anthony _image_info->colorspace=(ColorspaceType) parse; 635805a2d48e7e2ed7d699871183ed706699119281canthony break; 636805a2d48e7e2ed7d699871183ed706699119281canthony } 637afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("comment",option+1) == 0) 638805a2d48e7e2ed7d699871183ed706699119281canthony { 63992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 640805a2d48e7e2ed7d699871183ed706699119281canthony break; 641805a2d48e7e2ed7d699871183ed706699119281canthony } 642afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("compose",option+1) == 0) 643805a2d48e7e2ed7d699871183ed706699119281canthony { 64492c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: _image_info should be used, 64572feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. - REMOVE 64672feaa664126c198b9ccd072b6ef181338a76c6canthony 647afbaed757145095f09d6d614653ed3b58068cb3banthony This setting should NOT be used to set image 'compose' 64892c93bd35e207736d340f1b32000006a5bf6208eanthony "-layer" operators shoud use _image_info if defined otherwise 64972feaa664126c198b9ccd072b6ef181338a76c6canthony they should use a per-image compose setting. 650965524bd6cfe551433e9590f557a31f85a2b4c05anthony */ 651ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony parse = ParseCommandOption(MagickComposeOptions,MagickFalse, 652ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony ArgOption("undefined")); 653ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (parse < 0) 654ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedComposeOperator", 655ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg1); 656ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony _image_info->compose=(CompositeOperator) parse; 65792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 658805a2d48e7e2ed7d699871183ed706699119281canthony break; 659805a2d48e7e2ed7d699871183ed706699119281canthony } 660afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("compress",option+1) == 0) 661805a2d48e7e2ed7d699871183ed706699119281canthony { 66292c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: What should be used? _image_info or ImageOption ??? 6635f867ae6899e46eb35c30b38e9479312880608cfanthony The former is more efficent, but Crisy prefers the latter! 66472feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 6655f867ae6899e46eb35c30b38e9479312880608cfanthony 66692c93bd35e207736d340f1b32000006a5bf6208eanthony The coders appears to use _image_info, not Image_Option 6675f867ae6899e46eb35c30b38e9479312880608cfanthony however the image attribute (for save) is set from the 6685f867ae6899e46eb35c30b38e9479312880608cfanthony ImageOption! 66972feaa664126c198b9ccd072b6ef181338a76c6canthony 67072feaa664126c198b9ccd072b6ef181338a76c6canthony Note that "undefined" is a different setting to "none". 6715f867ae6899e46eb35c30b38e9479312880608cfanthony */ 672ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony parse = ParseCommandOption(MagickCompressOptions,MagickFalse, 673ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony ArgOption("undefined")); 674ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (parse < 0) 675ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedImageCompression", 676ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg1); 677ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony _image_info->compression=(CompressionType) parse; 67892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 679805a2d48e7e2ed7d699871183ed706699119281canthony break; 680805a2d48e7e2ed7d699871183ed706699119281canthony } 681ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 682805a2d48e7e2ed7d699871183ed706699119281canthony } 683805a2d48e7e2ed7d699871183ed706699119281canthony case 'd': 684805a2d48e7e2ed7d699871183ed706699119281canthony { 685afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("debug",option+1) == 0) 686805a2d48e7e2ed7d699871183ed706699119281canthony { 68772feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. */ 688ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony arg1=ArgOption("none"); 689ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony parse = ParseCommandOption(MagickLogEventOptions,MagickFalse,arg1); 690ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (parse < 0) 691ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedEventType", 692ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg1); 693ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony (void) SetLogEventMask(arg1); 694ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony _image_info->debug=IsEventLogging(); /* extract logging*/ 69543f425dd7d5b33887726982b28ebfa06f5560636anthony cli_wand->wand.debug=IsEventLogging(); 696805a2d48e7e2ed7d699871183ed706699119281canthony break; 697805a2d48e7e2ed7d699871183ed706699119281canthony } 698afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("define",option+1) == 0) 699805a2d48e7e2ed7d699871183ed706699119281canthony { 70024aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony if (LocaleNCompare(arg1,"registry:",9) == 0) 701805a2d48e7e2ed7d699871183ed706699119281canthony { 7025f867ae6899e46eb35c30b38e9479312880608cfanthony if (IfSetOption) 70392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) DefineImageRegistry(StringRegistryType,arg1+9,_exception); 7045f867ae6899e46eb35c30b38e9479312880608cfanthony else 70524aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony (void) DeleteImageRegistry(arg1+9); 706805a2d48e7e2ed7d699871183ed706699119281canthony break; 707805a2d48e7e2ed7d699871183ed706699119281canthony } 70824aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony /* DefineImageOption() equals SetImageOption() but with '=' */ 7095f867ae6899e46eb35c30b38e9479312880608cfanthony if (IfSetOption) 71092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) DefineImageOption(_image_info,arg1); 711b9dbc296c59e91df014757130b4e584c7fb6c74ddirk else if (DeleteImageOption(_image_info,arg1) == MagickFalse) 712ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"NoSuchOption",option,arg1); 713805a2d48e7e2ed7d699871183ed706699119281canthony break; 714805a2d48e7e2ed7d699871183ed706699119281canthony } 715afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("delay",option+1) == 0) 716805a2d48e7e2ed7d699871183ed706699119281canthony { 717afbaed757145095f09d6d614653ed3b58068cb3banthony /* Only used for new images via AcquireImage() 718afbaed757145095f09d6d614653ed3b58068cb3banthony FUTURE: Option should also be used for "-morph" (color morphing) 7195f867ae6899e46eb35c30b38e9479312880608cfanthony */ 720ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony arg1=ArgOption("0"); 7215d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 722ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 723ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony (void) SetImageOption(_image_info,option+1,arg1); 724805a2d48e7e2ed7d699871183ed706699119281canthony break; 725805a2d48e7e2ed7d699871183ed706699119281canthony } 726afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("density",option+1) == 0) 727805a2d48e7e2ed7d699871183ed706699119281canthony { 72892c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: strings used in _image_info attr and _draw_info! 72972feaa664126c198b9ccd072b6ef181338a76c6canthony Basically as density can be in a XxY form! 73072feaa664126c198b9ccd072b6ef181338a76c6canthony 73172feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 73272feaa664126c198b9ccd072b6ef181338a76c6canthony */ 7335d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 734ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 73592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 73692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->density,ArgOption(NULL)); 73792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->density,_image_info->density); 738805a2d48e7e2ed7d699871183ed706699119281canthony break; 739805a2d48e7e2ed7d699871183ed706699119281canthony } 740afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("depth",option+1) == 0) 741805a2d48e7e2ed7d699871183ed706699119281canthony { 74272feaa664126c198b9ccd072b6ef181338a76c6canthony /* This is also a SimpleImageOperator! for 8->16 vaule trunc !!!! 74372feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 74472feaa664126c198b9ccd072b6ef181338a76c6canthony */ 7455d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 746ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 74792c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->depth=IfSetOption?StringToUnsignedLong(arg1) 7485f867ae6899e46eb35c30b38e9479312880608cfanthony :MAGICKCORE_QUANTUM_DEPTH; 749805a2d48e7e2ed7d699871183ed706699119281canthony break; 750805a2d48e7e2ed7d699871183ed706699119281canthony } 751afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("direction",option+1) == 0) 752805a2d48e7e2ed7d699871183ed706699119281canthony { 75392c93bd35e207736d340f1b32000006a5bf6208eanthony /* Image Option is only used to set _draw_info */ 754ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony arg1=ArgOption("undefined"); 755ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony parse = ParseCommandOption(MagickDirectionOptions,MagickFalse,arg1); 756ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (parse < 0) 757ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedDirectionType", 758ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg1); 759ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony _draw_info->direction=(DirectionType) parse; 760ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony (void) SetImageOption(_image_info,option+1,arg1); 761805a2d48e7e2ed7d699871183ed706699119281canthony break; 762805a2d48e7e2ed7d699871183ed706699119281canthony } 763afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("display",option+1) == 0) 764805a2d48e7e2ed7d699871183ed706699119281canthony { 76592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->server_name,ArgOption(NULL)); 76692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->server_name,_image_info->server_name); 767805a2d48e7e2ed7d699871183ed706699119281canthony break; 768805a2d48e7e2ed7d699871183ed706699119281canthony } 769afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("dispose",option+1) == 0) 770805a2d48e7e2ed7d699871183ed706699119281canthony { 77172feaa664126c198b9ccd072b6ef181338a76c6canthony /* only used in setting new images */ 772ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony arg1=ArgOption("undefined"); 773ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony parse = ParseCommandOption(MagickDisposeOptions,MagickFalse,arg1); 774ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (parse < 0) 775ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedDisposeMethod", 776ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg1); 77792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption("undefined")); 778805a2d48e7e2ed7d699871183ed706699119281canthony break; 779805a2d48e7e2ed7d699871183ed706699119281canthony } 780b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (LocaleCompare("dissimilarity-threshold",option+1) == 0) 781b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 782b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* FUTURE: this is only used by CompareImages() which is used 783b1d483a6a6a5678173db9d60bec52dd5a37826beanthony only by the "compare" CLI program at this time. */ 784b1d483a6a6a5678173db9d60bec52dd5a37826beanthony arg1=ArgOption(DEFAULT_DISSIMILARITY_THRESHOLD); 7855d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 786b1d483a6a6a5678173db9d60bec52dd5a37826beanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 787b1d483a6a6a5678173db9d60bec52dd5a37826beanthony (void) SetImageOption(_image_info,option+1,arg1); 788b1d483a6a6a5678173db9d60bec52dd5a37826beanthony break; 789b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 790afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("dither",option+1) == 0) 791805a2d48e7e2ed7d699871183ed706699119281canthony { 79292c93bd35e207736d340f1b32000006a5bf6208eanthony /* _image_info attr (on/off), _quantize_info attr (on/off) 79392c93bd35e207736d340f1b32000006a5bf6208eanthony but also ImageInfo and _quantize_info method! 79472feaa664126c198b9ccd072b6ef181338a76c6canthony FUTURE: merge the duality of the dithering options 79572feaa664126c198b9ccd072b6ef181338a76c6canthony */ 796cbda611068350bf4459f2dda1951f8823702e129cristy _image_info->dither = ArgBoolean; 79792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption("none")); 79892c93bd35e207736d340f1b32000006a5bf6208eanthony _quantize_info->dither_method=(DitherMethod) ParseCommandOption( 799cbda611068350bf4459f2dda1951f8823702e129cristy MagickDitherOptions,MagickFalse,ArgOption("none")); 80092c93bd35e207736d340f1b32000006a5bf6208eanthony if (_quantize_info->dither_method == NoDitherMethod) 801cbda611068350bf4459f2dda1951f8823702e129cristy _image_info->dither = MagickFalse; 802805a2d48e7e2ed7d699871183ed706699119281canthony break; 803805a2d48e7e2ed7d699871183ed706699119281canthony } 804ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 805805a2d48e7e2ed7d699871183ed706699119281canthony } 806805a2d48e7e2ed7d699871183ed706699119281canthony case 'e': 807805a2d48e7e2ed7d699871183ed706699119281canthony { 808afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("encoding",option+1) == 0) 809805a2d48e7e2ed7d699871183ed706699119281canthony { 81092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->encoding,ArgOption("undefined")); 81192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,_draw_info->encoding); 812805a2d48e7e2ed7d699871183ed706699119281canthony break; 813805a2d48e7e2ed7d699871183ed706699119281canthony } 814afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("endian",option+1) == 0) 815805a2d48e7e2ed7d699871183ed706699119281canthony { 81692c93bd35e207736d340f1b32000006a5bf6208eanthony /* Both _image_info attr and ImageInfo */ 8172a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony arg1 = ArgOption("undefined"); 8182a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony parse = ParseCommandOption(MagickEndianOptions,MagickFalse,arg1); 8192a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony if (parse < 0) 8202a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedEndianType", 8212a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony option,arg1); 822f46d42620631d2581e0b6a56456e203e17c427c8anthony /* FUTURE: check alloc/free of endian string! - remove? */ 823aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy _image_info->endian=(EndianType) (*arg1); 8242a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (void) SetImageOption(_image_info,option+1,arg1); 825805a2d48e7e2ed7d699871183ed706699119281canthony break; 826805a2d48e7e2ed7d699871183ed706699119281canthony } 827afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("extract",option+1) == 0) 828805a2d48e7e2ed7d699871183ed706699119281canthony { 82992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->extract,ArgOption(NULL)); 830805a2d48e7e2ed7d699871183ed706699119281canthony break; 831805a2d48e7e2ed7d699871183ed706699119281canthony } 832ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 833805a2d48e7e2ed7d699871183ed706699119281canthony } 834805a2d48e7e2ed7d699871183ed706699119281canthony case 'f': 835805a2d48e7e2ed7d699871183ed706699119281canthony { 836afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("family",option+1) == 0) 8376dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony { 83892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->family,ArgOption(NULL)); 8396dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony break; 8406dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony } 841a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (LocaleCompare("features",option+1) == 0) 842a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony { 843a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageOption(_image_info,"identify:features", 844f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy ArgBooleanString); 845a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (IfSetOption) 846a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageArtifact(_image,"verbose","true"); 847a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony break; 848a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony } 849afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("fill",option+1) == 0) 850805a2d48e7e2ed7d699871183ed706699119281canthony { 85192c93bd35e207736d340f1b32000006a5bf6208eanthony /* Set "fill" OR "fill-pattern" in _draw_info 852fd706f930f397221c6ba26f112e96e262fb0ba2eanthony The original fill color is preserved if a fill-pattern is given. 853fd706f930f397221c6ba26f112e96e262fb0ba2eanthony That way it does not effect other operations that directly using 854fd706f930f397221c6ba26f112e96e262fb0ba2eanthony the fill color and, can be retored using "+tile". 855afbaed757145095f09d6d614653ed3b58068cb3banthony */ 85672feaa664126c198b9ccd072b6ef181338a76c6canthony MagickBooleanType 85772feaa664126c198b9ccd072b6ef181338a76c6canthony status; 8586dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony 8596dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony ExceptionInfo 8606dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony *sans; 8616dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony 862fd706f930f397221c6ba26f112e96e262fb0ba2eanthony PixelInfo 863fd706f930f397221c6ba26f112e96e262fb0ba2eanthony color; 864fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 8652a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony arg1 = ArgOption("none"); /* +fill turns it off! */ 8662a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (void) SetImageOption(_image_info,option+1,arg1); 86792c93bd35e207736d340f1b32000006a5bf6208eanthony if (_draw_info->fill_pattern != (Image *) NULL) 86892c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->fill_pattern=DestroyImage(_draw_info->fill_pattern); 8696dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony 87072feaa664126c198b9ccd072b6ef181338a76c6canthony /* is it a color or a image? -- ignore exceptions */ 8716dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony sans=AcquireExceptionInfo(); 8722a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony status=QueryColorCompliance(arg1,AllCompliance,&color,sans); 8736dc09cd33c4523a3c83b9ba5c670b02ac9561687anthony sans=DestroyExceptionInfo(sans); 874fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 8755d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (status == MagickFalse) 8762a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony _draw_info->fill_pattern=GetImageCache(_image_info,arg1,_exception); 877fd706f930f397221c6ba26f112e96e262fb0ba2eanthony else 87892c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->fill=color; 879805a2d48e7e2ed7d699871183ed706699119281canthony break; 880805a2d48e7e2ed7d699871183ed706699119281canthony } 881afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("filter",option+1) == 0) 882805a2d48e7e2ed7d699871183ed706699119281canthony { 88372feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. */ 8842a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony arg1 = ArgOption("undefined"); 8852a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony parse = ParseCommandOption(MagickFilterOptions,MagickFalse,arg1); 8862a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony if (parse < 0) 8872a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedImageFilter", 8882a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony option,arg1); 8892a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (void) SetImageOption(_image_info,option+1,arg1); 890805a2d48e7e2ed7d699871183ed706699119281canthony break; 891805a2d48e7e2ed7d699871183ed706699119281canthony } 892afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("font",option+1) == 0) 893805a2d48e7e2ed7d699871183ed706699119281canthony { 89492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->font,ArgOption(NULL)); 89592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->font,_draw_info->font); 896805a2d48e7e2ed7d699871183ed706699119281canthony break; 897805a2d48e7e2ed7d699871183ed706699119281canthony } 898afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("format",option+1) == 0) 899805a2d48e7e2ed7d699871183ed706699119281canthony { 900dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony /* FUTURE: why the ping test, you could set ping after this! */ 901dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony /* 902805a2d48e7e2ed7d699871183ed706699119281canthony register const char 903805a2d48e7e2ed7d699871183ed706699119281canthony *q; 904805a2d48e7e2ed7d699871183ed706699119281canthony 90524aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony for (q=strchr(arg1,'%'); q != (char *) NULL; q=strchr(q+1,'%')) 906805a2d48e7e2ed7d699871183ed706699119281canthony if (strchr("Agkrz@[#",*(q+1)) != (char *) NULL) 90792c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->ping=MagickFalse; 908dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 90992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 910805a2d48e7e2ed7d699871183ed706699119281canthony break; 911805a2d48e7e2ed7d699871183ed706699119281canthony } 912afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("fuzz",option+1) == 0) 913805a2d48e7e2ed7d699871183ed706699119281canthony { 91472feaa664126c198b9ccd072b6ef181338a76c6canthony /* Option used to set image fuzz! unless blank canvas (from color) 915dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony Image attribute used for color compare operations 91672feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 91772feaa664126c198b9ccd072b6ef181338a76c6canthony 9182a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony FUTURE: Can't find anything else using _image_info->fuzz directly! 919a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony convert structure attribute to 'option' string 9206613bf3ff41a27822bb38c9842cc5c11f4ccb3feanthony */ 9212a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony arg1=ArgOption("0"); 9225d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 9232a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 9242a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony _image_info->fuzz=StringToDoubleInterval(arg1,(double) 92580c3775de081817d58849ae9ded5325d397fb1acanthony QuantumRange+1.0); 9262a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (void) SetImageOption(_image_info,option+1,arg1); 927805a2d48e7e2ed7d699871183ed706699119281canthony break; 928805a2d48e7e2ed7d699871183ed706699119281canthony } 929ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 930805a2d48e7e2ed7d699871183ed706699119281canthony } 931805a2d48e7e2ed7d699871183ed706699119281canthony case 'g': 932805a2d48e7e2ed7d699871183ed706699119281canthony { 933afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("gravity",option+1) == 0) 934805a2d48e7e2ed7d699871183ed706699119281canthony { 93572feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. */ 936fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony arg1 = ArgOption("none"); 937fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony parse = ParseCommandOption(MagickGravityOptions,MagickFalse,arg1); 938fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if (parse < 0) 939fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedGravityType", 940fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony option,arg1); 941fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony _draw_info->gravity=(GravityType) parse; 942e8490973fe48ef47d778e711b28a7b5b11b9e8dfanthony (void) SetImageOption(_image_info,option+1,arg1); 943805a2d48e7e2ed7d699871183ed706699119281canthony break; 944805a2d48e7e2ed7d699871183ed706699119281canthony } 945afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("green-primary",option+1) == 0) 946805a2d48e7e2ed7d699871183ed706699119281canthony { 947dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony /* Image chromaticity X,Y NB: Y=X if Y not defined 94872feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 94972feaa664126c198b9ccd072b6ef181338a76c6canthony Used directly by many coders 950dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 951f42014dc55e8d21355ea3d17372e2d9c14b07641anthony arg1=ArgOption("0.0"); 9525d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 953fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 954f42014dc55e8d21355ea3d17372e2d9c14b07641anthony (void) SetImageOption(_image_info,option+1,arg1); 955805a2d48e7e2ed7d699871183ed706699119281canthony break; 956805a2d48e7e2ed7d699871183ed706699119281canthony } 957ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 958805a2d48e7e2ed7d699871183ed706699119281canthony } 959b1d483a6a6a5678173db9d60bec52dd5a37826beanthony case 'h': 960b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 961b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (LocaleCompare("highlight-color",option+1) == 0) 962b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 963b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* FUTURE: this is only used by CompareImages() which is used 964b1d483a6a6a5678173db9d60bec52dd5a37826beanthony only by the "compare" CLI program at this time. */ 965b1d483a6a6a5678173db9d60bec52dd5a37826beanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 966b1d483a6a6a5678173db9d60bec52dd5a37826beanthony break; 967b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 968b1d483a6a6a5678173db9d60bec52dd5a37826beanthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 969b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 970805a2d48e7e2ed7d699871183ed706699119281canthony case 'i': 971805a2d48e7e2ed7d699871183ed706699119281canthony { 97270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (LocaleCompare("intensity",option+1) == 0) 97370e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy { 97470e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy arg1 = ArgOption("undefined"); 9758f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy parse = ParseCommandOption(MagickPixelIntensityOptions,MagickFalse, 9768f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy arg1); 97770e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy if (parse < 0) 9788f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy CLIWandExceptArgBreak(OptionError,"UnrecognizedIntensityType", 9798f84fdd76c69a6cab0dd0dddaa7daadf1bdd26eecristy option,arg1); 98070e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy (void) SetImageOption(_image_info,option+1,arg1); 98170e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy break; 98270e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy } 983afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("intent",option+1) == 0) 984805a2d48e7e2ed7d699871183ed706699119281canthony { 98572feaa664126c198b9ccd072b6ef181338a76c6canthony /* Only used by coders: MIFF, MPC, BMP, PNG 986dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony and for image profile call to AcquireTransformThreadSet() 98772feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 988dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 98970e9f6802bd2c8ab71b3aa9c59d7e2b8936d5710cristy arg1 = ArgOption("undefined"); 990fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony parse = ParseCommandOption(MagickIntentOptions,MagickFalse,arg1); 991fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if (parse < 0) 992fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedIntentType", 993fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony option,arg1); 994fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony (void) SetImageOption(_image_info,option+1,arg1); 995805a2d48e7e2ed7d699871183ed706699119281canthony break; 996805a2d48e7e2ed7d699871183ed706699119281canthony } 997afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("interlace",option+1) == 0) 998805a2d48e7e2ed7d699871183ed706699119281canthony { 99992c93bd35e207736d340f1b32000006a5bf6208eanthony /* _image_info is directly used by coders (so why an image setting?) 100072feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 1001dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 1002fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony arg1 = ArgOption("undefined"); 1003fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony parse = ParseCommandOption(MagickInterlaceOptions,MagickFalse,arg1); 1004fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if (parse < 0) 1005fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedInterlaceType", 1006fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony option,arg1); 1007fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony _image_info->interlace=(InterlaceType) parse; 1008fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony (void) SetImageOption(_image_info,option+1,arg1); 1009805a2d48e7e2ed7d699871183ed706699119281canthony break; 1010805a2d48e7e2ed7d699871183ed706699119281canthony } 1011afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("interline-spacing",option+1) == 0) 1012805a2d48e7e2ed7d699871183ed706699119281canthony { 10135d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 1014fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 101592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1, ArgOption(NULL)); 101692c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->interline_spacing=StringToDouble(ArgOption("0"), 101772feaa664126c198b9ccd072b6ef181338a76c6canthony (char **) NULL); 1018805a2d48e7e2ed7d699871183ed706699119281canthony break; 1019805a2d48e7e2ed7d699871183ed706699119281canthony } 1020afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("interpolate",option+1) == 0) 1021805a2d48e7e2ed7d699871183ed706699119281canthony { 1022fd706f930f397221c6ba26f112e96e262fb0ba2eanthony /* SyncImageSettings() used to set per-image attribute. */ 1023fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony arg1 = ArgOption("undefined"); 1024fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony parse = ParseCommandOption(MagickInterpolateOptions,MagickFalse,arg1); 1025fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if (parse < 0) 1026fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedInterpolateMethod", 1027fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony option,arg1); 1028fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony (void) SetImageOption(_image_info,option+1,arg1); 1029805a2d48e7e2ed7d699871183ed706699119281canthony break; 1030805a2d48e7e2ed7d699871183ed706699119281canthony } 1031afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("interword-spacing",option+1) == 0) 1032805a2d48e7e2ed7d699871183ed706699119281canthony { 10335d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 1034fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 103592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1, ArgOption(NULL)); 103692c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->interword_spacing=StringToDouble(ArgOption("0"),(char **) NULL); 1037805a2d48e7e2ed7d699871183ed706699119281canthony break; 1038805a2d48e7e2ed7d699871183ed706699119281canthony } 1039ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1040805a2d48e7e2ed7d699871183ed706699119281canthony } 1041805a2d48e7e2ed7d699871183ed706699119281canthony case 'k': 1042805a2d48e7e2ed7d699871183ed706699119281canthony { 1043afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("kerning",option+1) == 0) 1044805a2d48e7e2ed7d699871183ed706699119281canthony { 10455d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 1046fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 104792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 104892c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->kerning=StringToDouble(ArgOption("0"),(char **) NULL); 1049805a2d48e7e2ed7d699871183ed706699119281canthony break; 1050805a2d48e7e2ed7d699871183ed706699119281canthony } 1051ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1052805a2d48e7e2ed7d699871183ed706699119281canthony } 1053805a2d48e7e2ed7d699871183ed706699119281canthony case 'l': 1054805a2d48e7e2ed7d699871183ed706699119281canthony { 1055afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("label",option+1) == 0) 1056805a2d48e7e2ed7d699871183ed706699119281canthony { 105772feaa664126c198b9ccd072b6ef181338a76c6canthony /* only used for new images - not in SyncImageOptions() */ 105892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1059805a2d48e7e2ed7d699871183ed706699119281canthony break; 1060805a2d48e7e2ed7d699871183ed706699119281canthony } 1061756cd0d228823ea405498ec6b2e9b8843beaca96anthony if (LocaleCompare("limit",option+1) == 0) 1062756cd0d228823ea405498ec6b2e9b8843beaca96anthony { 1063756cd0d228823ea405498ec6b2e9b8843beaca96anthony MagickSizeType 1064756cd0d228823ea405498ec6b2e9b8843beaca96anthony limit; 1065756cd0d228823ea405498ec6b2e9b8843beaca96anthony 1066756cd0d228823ea405498ec6b2e9b8843beaca96anthony limit=MagickResourceInfinity; 1067756cd0d228823ea405498ec6b2e9b8843beaca96anthony parse= ParseCommandOption(MagickResourceOptions,MagickFalse,arg1); 1068756cd0d228823ea405498ec6b2e9b8843beaca96anthony if ( parse < 0 ) 1069756cd0d228823ea405498ec6b2e9b8843beaca96anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedResourceType", 1070756cd0d228823ea405498ec6b2e9b8843beaca96anthony option,arg1); 1071756cd0d228823ea405498ec6b2e9b8843beaca96anthony if (LocaleCompare("unlimited",arg2) != 0) 1072756cd0d228823ea405498ec6b2e9b8843beaca96anthony limit=(MagickSizeType) SiPrefixToDoubleInterval(arg2,100.0); 1073756cd0d228823ea405498ec6b2e9b8843beaca96anthony (void) SetMagickResourceLimit((ResourceType)parse,limit); 1074756cd0d228823ea405498ec6b2e9b8843beaca96anthony break; 1075756cd0d228823ea405498ec6b2e9b8843beaca96anthony } 1076afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("log",option+1) == 0) 1077805a2d48e7e2ed7d699871183ed706699119281canthony { 1078fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if (IfSetOption) { 1079fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if ((strchr(arg1,'%') == (char *) NULL)) 1080fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 108124aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony (void) SetLogFormat(arg1); 1082fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony } 1083805a2d48e7e2ed7d699871183ed706699119281canthony break; 1084805a2d48e7e2ed7d699871183ed706699119281canthony } 1085975a8d7aba7678845112e4d2c5a155011f35a3abanthony if (LocaleCompare("lowlight-color",option+1) == 0) 1086975a8d7aba7678845112e4d2c5a155011f35a3abanthony { 1087b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* FUTURE: this is only used by CompareImages() which is used 1088b1d483a6a6a5678173db9d60bec52dd5a37826beanthony only by the "compare" CLI program at this time. */ 1089975a8d7aba7678845112e4d2c5a155011f35a3abanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1090975a8d7aba7678845112e4d2c5a155011f35a3abanthony break; 1091975a8d7aba7678845112e4d2c5a155011f35a3abanthony } 1092afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("loop",option+1) == 0) 1093805a2d48e7e2ed7d699871183ed706699119281canthony { 109472feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. */ 1095fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony arg1=ArgOption("0"); 10965d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 1097fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1098fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony (void) SetImageOption(_image_info,option+1,arg1); 1099805a2d48e7e2ed7d699871183ed706699119281canthony break; 1100805a2d48e7e2ed7d699871183ed706699119281canthony } 1101ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1102805a2d48e7e2ed7d699871183ed706699119281canthony } 1103805a2d48e7e2ed7d699871183ed706699119281canthony case 'm': 1104805a2d48e7e2ed7d699871183ed706699119281canthony { 1105b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (LocaleCompare("metric",option+1) == 0) 1106b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 1107b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* FUTURE: this is only used by CompareImages() which is used 1108b1d483a6a6a5678173db9d60bec52dd5a37826beanthony only by the "compare" CLI program at this time. */ 1109b1d483a6a6a5678173db9d60bec52dd5a37826beanthony parse=ParseCommandOption(MagickMetricOptions,MagickFalse,arg1); 1110b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if ( parse < 0 ) 1111b1d483a6a6a5678173db9d60bec52dd5a37826beanthony CLIWandExceptArgBreak(OptionError,"UnrecognizedMetricType", 1112b1d483a6a6a5678173db9d60bec52dd5a37826beanthony option,arg1); 1113b1d483a6a6a5678173db9d60bec52dd5a37826beanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1114cd358fcc24e0be863b1d6e1917e799fc04add92aanthony break; 1115805a2d48e7e2ed7d699871183ed706699119281canthony } 1116bd4a3c228c0e785517b8ab630b2cc6095373f710cristy if (LocaleCompare("moments",option+1) == 0) 1117bd4a3c228c0e785517b8ab630b2cc6095373f710cristy { 1118bd4a3c228c0e785517b8ab630b2cc6095373f710cristy (void) SetImageOption(_image_info,"identify:moments", 1119bd4a3c228c0e785517b8ab630b2cc6095373f710cristy ArgBooleanString); 1120bd4a3c228c0e785517b8ab630b2cc6095373f710cristy if (IfSetOption) 1121bd4a3c228c0e785517b8ab630b2cc6095373f710cristy (void) SetImageArtifact(_image,"verbose","true"); 1122bd4a3c228c0e785517b8ab630b2cc6095373f710cristy break; 1123bd4a3c228c0e785517b8ab630b2cc6095373f710cristy } 1124afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("monitor",option+1) == 0) 1125805a2d48e7e2ed7d699871183ed706699119281canthony { 112692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageInfoProgressMonitor(_image_info, IfSetOption? 112731f1bf7bb6ee2698a2afab42ee0329b11663636canthony MonitorProgress: (MagickProgressMonitor) NULL, (void *) NULL); 1128805a2d48e7e2ed7d699871183ed706699119281canthony break; 1129805a2d48e7e2ed7d699871183ed706699119281canthony } 1130afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("monochrome",option+1) == 0) 1131805a2d48e7e2ed7d699871183ed706699119281canthony { 113224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony /* Setting (used by some input coders!) -- why? 113324aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony Warning: This is also Special '-type' SimpleOperator 113472feaa664126c198b9ccd072b6ef181338a76c6canthony */ 113592c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->monochrome= ArgBoolean; 1136805a2d48e7e2ed7d699871183ed706699119281canthony break; 1137805a2d48e7e2ed7d699871183ed706699119281canthony } 1138ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1139805a2d48e7e2ed7d699871183ed706699119281canthony } 1140805a2d48e7e2ed7d699871183ed706699119281canthony case 'o': 1141805a2d48e7e2ed7d699871183ed706699119281canthony { 1142afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("orient",option+1) == 0) 1143805a2d48e7e2ed7d699871183ed706699119281canthony { 114472feaa664126c198b9ccd072b6ef181338a76c6canthony /* Is not used when defining for new images. 1145dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony This makes it more of a 'operation' than a setting 114672feaa664126c198b9ccd072b6ef181338a76c6canthony FUTURE: make set meta-data operator instead. 114772feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 1148dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 11497bc87995f5fcb67d01e8cad3e80b0024b42e942danthony parse=ParseCommandOption(MagickOrientationOptions,MagickFalse, 11507bc87995f5fcb67d01e8cad3e80b0024b42e942danthony ArgOption("undefined")); 11517bc87995f5fcb67d01e8cad3e80b0024b42e942danthony if (parse < 0) 11527bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"UnrecognizedImageOrientation", 11537bc87995f5fcb67d01e8cad3e80b0024b42e942danthony option,arg1); 11547bc87995f5fcb67d01e8cad3e80b0024b42e942danthony _image_info->orientation=(OrientationType)parse; 115592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1, ArgOption(NULL)); 1156805a2d48e7e2ed7d699871183ed706699119281canthony break; 1157805a2d48e7e2ed7d699871183ed706699119281canthony } 1158ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1159805a2d48e7e2ed7d699871183ed706699119281canthony } 1160805a2d48e7e2ed7d699871183ed706699119281canthony case 'p': 1161805a2d48e7e2ed7d699871183ed706699119281canthony { 1162afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("page",option+1) == 0) 1163805a2d48e7e2ed7d699871183ed706699119281canthony { 11647bc87995f5fcb67d01e8cad3e80b0024b42e942danthony /* Only used for new images and image generators. 116572feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. ????? 116672feaa664126c198b9ccd072b6ef181338a76c6canthony That last is WRONG!!!! 11677bc87995f5fcb67d01e8cad3e80b0024b42e942danthony FUTURE: adjust named 'page' sizes according density 116872feaa664126c198b9ccd072b6ef181338a76c6canthony */ 1169805a2d48e7e2ed7d699871183ed706699119281canthony char 1170805a2d48e7e2ed7d699871183ed706699119281canthony *canonical_page, 1171151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy page[MagickPathExtent]; 1172805a2d48e7e2ed7d699871183ed706699119281canthony 1173805a2d48e7e2ed7d699871183ed706699119281canthony const char 1174805a2d48e7e2ed7d699871183ed706699119281canthony *image_option; 1175805a2d48e7e2ed7d699871183ed706699119281canthony 1176805a2d48e7e2ed7d699871183ed706699119281canthony MagickStatusType 1177805a2d48e7e2ed7d699871183ed706699119281canthony flags; 1178805a2d48e7e2ed7d699871183ed706699119281canthony 1179805a2d48e7e2ed7d699871183ed706699119281canthony RectangleInfo 1180805a2d48e7e2ed7d699871183ed706699119281canthony geometry; 1181805a2d48e7e2ed7d699871183ed706699119281canthony 1182dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony if (!IfSetOption) 1183805a2d48e7e2ed7d699871183ed706699119281canthony { 118492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) DeleteImageOption(_image_info,option+1); 118592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->page,(char *) NULL); 1186805a2d48e7e2ed7d699871183ed706699119281canthony break; 1187805a2d48e7e2ed7d699871183ed706699119281canthony } 1188805a2d48e7e2ed7d699871183ed706699119281canthony (void) ResetMagickMemory(&geometry,0,sizeof(geometry)); 118992c93bd35e207736d340f1b32000006a5bf6208eanthony image_option=GetImageOption(_image_info,"page"); 1190805a2d48e7e2ed7d699871183ed706699119281canthony if (image_option != (const char *) NULL) 1191805a2d48e7e2ed7d699871183ed706699119281canthony flags=ParseAbsoluteGeometry(image_option,&geometry); 119224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony canonical_page=GetPageGeometry(arg1); 1193805a2d48e7e2ed7d699871183ed706699119281canthony flags=ParseAbsoluteGeometry(canonical_page,&geometry); 1194805a2d48e7e2ed7d699871183ed706699119281canthony canonical_page=DestroyString(canonical_page); 1195151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(page,MagickPathExtent,"%lux%lu", 1196805a2d48e7e2ed7d699871183ed706699119281canthony (unsigned long) geometry.width,(unsigned long) geometry.height); 1197805a2d48e7e2ed7d699871183ed706699119281canthony if (((flags & XValue) != 0) || ((flags & YValue) != 0)) 1198151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(page,MagickPathExtent,"%lux%lu%+ld%+ld", 1199805a2d48e7e2ed7d699871183ed706699119281canthony (unsigned long) geometry.width,(unsigned long) geometry.height, 1200805a2d48e7e2ed7d699871183ed706699119281canthony (long) geometry.x,(long) geometry.y); 120192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,page); 120292c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->page,page); 1203805a2d48e7e2ed7d699871183ed706699119281canthony break; 1204805a2d48e7e2ed7d699871183ed706699119281canthony } 1205afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("ping",option+1) == 0) 1206805a2d48e7e2ed7d699871183ed706699119281canthony { 120792c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->ping = ArgBoolean; 1208805a2d48e7e2ed7d699871183ed706699119281canthony break; 1209805a2d48e7e2ed7d699871183ed706699119281canthony } 1210afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("pointsize",option+1) == 0) 1211805a2d48e7e2ed7d699871183ed706699119281canthony { 1212f42014dc55e8d21355ea3d17372e2d9c14b07641anthony if (IfSetOption) { 12135d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 1214f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1215f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _image_info->pointsize = 1216f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _draw_info->pointsize = 1217f42014dc55e8d21355ea3d17372e2d9c14b07641anthony StringToDouble(arg1,(char **) NULL); 1218f42014dc55e8d21355ea3d17372e2d9c14b07641anthony } 1219f42014dc55e8d21355ea3d17372e2d9c14b07641anthony else { 1220f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _image_info->pointsize=0.0; /* unset pointsize */ 1221f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _draw_info->pointsize=12.0; 1222f42014dc55e8d21355ea3d17372e2d9c14b07641anthony } 1223805a2d48e7e2ed7d699871183ed706699119281canthony break; 1224805a2d48e7e2ed7d699871183ed706699119281canthony } 1225afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("precision",option+1) == 0) 1226805a2d48e7e2ed7d699871183ed706699119281canthony { 1227f42014dc55e8d21355ea3d17372e2d9c14b07641anthony arg1=ArgOption("-1"); 12285d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 1229f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1230f42014dc55e8d21355ea3d17372e2d9c14b07641anthony (void) SetMagickPrecision(StringToInteger(arg1)); 1231805a2d48e7e2ed7d699871183ed706699119281canthony break; 1232805a2d48e7e2ed7d699871183ed706699119281canthony } 1233ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1234805a2d48e7e2ed7d699871183ed706699119281canthony } 1235805a2d48e7e2ed7d699871183ed706699119281canthony case 'q': 1236805a2d48e7e2ed7d699871183ed706699119281canthony { 1237afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("quality",option+1) == 0) 1238805a2d48e7e2ed7d699871183ed706699119281canthony { 12395d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 12407bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1241f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _image_info->quality= IfSetOption ? StringToUnsignedLong(arg1) 1242f42014dc55e8d21355ea3d17372e2d9c14b07641anthony : UNDEFINED_COMPRESSION_QUALITY; 124392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1244805a2d48e7e2ed7d699871183ed706699119281canthony break; 1245805a2d48e7e2ed7d699871183ed706699119281canthony } 1246afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("quantize",option+1) == 0) 1247afbaed757145095f09d6d614653ed3b58068cb3banthony { 124892c93bd35e207736d340f1b32000006a5bf6208eanthony /* Just a set direct in _quantize_info */ 12497bc87995f5fcb67d01e8cad3e80b0024b42e942danthony arg1=ArgOption("undefined"); 12507bc87995f5fcb67d01e8cad3e80b0024b42e942danthony parse=ParseCommandOption(MagickColorspaceOptions,MagickFalse,arg1); 12517bc87995f5fcb67d01e8cad3e80b0024b42e942danthony if (parse < 0) 12527bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace", 12537bc87995f5fcb67d01e8cad3e80b0024b42e942danthony option,arg1); 12547bc87995f5fcb67d01e8cad3e80b0024b42e942danthony _quantize_info->colorspace=(ColorspaceType)parse; 1255afbaed757145095f09d6d614653ed3b58068cb3banthony break; 1256afbaed757145095f09d6d614653ed3b58068cb3banthony } 1257afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("quiet",option+1) == 0) 1258805a2d48e7e2ed7d699871183ed706699119281canthony { 1259f42014dc55e8d21355ea3d17372e2d9c14b07641anthony /* FUTURE: if two -quiet is performed you can not do +quiet! 1260f42014dc55e8d21355ea3d17372e2d9c14b07641anthony This needs to be checked over thoughly. 1261f42014dc55e8d21355ea3d17372e2d9c14b07641anthony */ 1262805a2d48e7e2ed7d699871183ed706699119281canthony static WarningHandler 1263805a2d48e7e2ed7d699871183ed706699119281canthony warning_handler = (WarningHandler) NULL; 126472feaa664126c198b9ccd072b6ef181338a76c6canthony 1265afbaed757145095f09d6d614653ed3b58068cb3banthony WarningHandler 1266afbaed757145095f09d6d614653ed3b58068cb3banthony tmp = SetWarningHandler((WarningHandler) NULL); 1267805a2d48e7e2ed7d699871183ed706699119281canthony 1268afbaed757145095f09d6d614653ed3b58068cb3banthony if ( tmp != (WarningHandler) NULL) 1269afbaed757145095f09d6d614653ed3b58068cb3banthony warning_handler = tmp; /* remember the old handler */ 1270afbaed757145095f09d6d614653ed3b58068cb3banthony if (!IfSetOption) /* set the old handler */ 1271afbaed757145095f09d6d614653ed3b58068cb3banthony warning_handler=SetWarningHandler(warning_handler); 1272805a2d48e7e2ed7d699871183ed706699119281canthony break; 1273805a2d48e7e2ed7d699871183ed706699119281canthony } 1274ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1275805a2d48e7e2ed7d699871183ed706699119281canthony } 1276805a2d48e7e2ed7d699871183ed706699119281canthony case 'r': 1277805a2d48e7e2ed7d699871183ed706699119281canthony { 1278afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("red-primary",option+1) == 0) 1279805a2d48e7e2ed7d699871183ed706699119281canthony { 1280dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony /* Image chromaticity X,Y NB: Y=X if Y not defined 1281dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony Used by many coders 128272feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 1283dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 1284f42014dc55e8d21355ea3d17372e2d9c14b07641anthony arg1=ArgOption("0.0"); 12855d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 1286fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1287f42014dc55e8d21355ea3d17372e2d9c14b07641anthony (void) SetImageOption(_image_info,option+1,arg1); 1288805a2d48e7e2ed7d699871183ed706699119281canthony break; 1289805a2d48e7e2ed7d699871183ed706699119281canthony } 1290b0f7a18e64b0ff9ab853f2006c39d62e32905f65cristy if (LocaleCompare("regard-warnings",option+1) == 0) 1291e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony /* FUTURE: to be replaced by a 'fatal-level' type setting */ 1292b0f7a18e64b0ff9ab853f2006c39d62e32905f65cristy break; 1293afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("render",option+1) == 0) 1294afbaed757145095f09d6d614653ed3b58068cb3banthony { 129592c93bd35e207736d340f1b32000006a5bf6208eanthony /* _draw_info only setting */ 129692c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->render= ArgBooleanNot; 1297afbaed757145095f09d6d614653ed3b58068cb3banthony break; 1298afbaed757145095f09d6d614653ed3b58068cb3banthony } 1299756cd0d228823ea405498ec6b2e9b8843beaca96anthony if (LocaleCompare("respect-parenthesis",option+1) == 0) 1300756cd0d228823ea405498ec6b2e9b8843beaca96anthony { 1301756cd0d228823ea405498ec6b2e9b8843beaca96anthony /* link image and setting stacks - option is itself saved on stack! */ 1302756cd0d228823ea405498ec6b2e9b8843beaca96anthony (void) SetImageOption(_image_info,option+1,ArgBooleanString); 1303756cd0d228823ea405498ec6b2e9b8843beaca96anthony break; 1304756cd0d228823ea405498ec6b2e9b8843beaca96anthony } 1305ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1306805a2d48e7e2ed7d699871183ed706699119281canthony } 1307805a2d48e7e2ed7d699871183ed706699119281canthony case 's': 1308805a2d48e7e2ed7d699871183ed706699119281canthony { 1309afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sampling-factor",option+1) == 0) 1310805a2d48e7e2ed7d699871183ed706699119281canthony { 1311afbaed757145095f09d6d614653ed3b58068cb3banthony /* FUTURE: should be converted to jpeg:sampling_factor */ 13125d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 1313f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 131492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->sampling_factor,ArgOption(NULL)); 1315805a2d48e7e2ed7d699871183ed706699119281canthony break; 1316805a2d48e7e2ed7d699871183ed706699119281canthony } 1317afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("scene",option+1) == 0) 1318805a2d48e7e2ed7d699871183ed706699119281canthony { 1319f42014dc55e8d21355ea3d17372e2d9c14b07641anthony /* SyncImageSettings() used to set this as a per-image attribute. 132072feaa664126c198b9ccd072b6ef181338a76c6canthony What ??? Why ???? 132172feaa664126c198b9ccd072b6ef181338a76c6canthony */ 13225d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 1323f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 132492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 132592c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->scene=StringToUnsignedLong(ArgOption("0")); 1326805a2d48e7e2ed7d699871183ed706699119281canthony break; 1327805a2d48e7e2ed7d699871183ed706699119281canthony } 1328afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("seed",option+1) == 0) 1329805a2d48e7e2ed7d699871183ed706699119281canthony { 13305d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 1331f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1332d7761bbc118576cf4141d0e33f3c53157da63243cristy SetRandomSecretKey( 1333a30f8e619f24abab21448ee8019794e47e0baed9cristy IfSetOption ? (unsigned long) StringToUnsignedLong(arg1) 1334a30f8e619f24abab21448ee8019794e47e0baed9cristy : (unsigned long) time((time_t *) NULL) ); 1335805a2d48e7e2ed7d699871183ed706699119281canthony break; 1336805a2d48e7e2ed7d699871183ed706699119281canthony } 1337afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("size",option+1) == 0) 1338805a2d48e7e2ed7d699871183ed706699119281canthony { 133992c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: string in _image_info -- convert to Option ??? 1340afbaed757145095f09d6d614653ed3b58068cb3banthony Look at the special handling for "size" in SetImageOption() 134174b1cfc16264081b41a57f6287d72283c8881f0aanthony */ 134292c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->size,ArgOption(NULL)); 1343afbaed757145095f09d6d614653ed3b58068cb3banthony break; 1344afbaed757145095f09d6d614653ed3b58068cb3banthony } 1345afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("stretch",option+1) == 0) 1346afbaed757145095f09d6d614653ed3b58068cb3banthony { 1347f42014dc55e8d21355ea3d17372e2d9c14b07641anthony arg1=ArgOption("undefined"); 1348f42014dc55e8d21355ea3d17372e2d9c14b07641anthony parse = ParseCommandOption(MagickStretchOptions,MagickFalse,arg1); 1349f42014dc55e8d21355ea3d17372e2d9c14b07641anthony if (parse < 0) 1350f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedStretchType", 1351f42014dc55e8d21355ea3d17372e2d9c14b07641anthony option,arg1); 1352f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _draw_info->stretch=(StretchType) parse; 1353805a2d48e7e2ed7d699871183ed706699119281canthony break; 1354805a2d48e7e2ed7d699871183ed706699119281canthony } 1355afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("stroke",option+1) == 0) 1356805a2d48e7e2ed7d699871183ed706699119281canthony { 1357afbaed757145095f09d6d614653ed3b58068cb3banthony /* set stroke color OR stroke-pattern 1358fd706f930f397221c6ba26f112e96e262fb0ba2eanthony UPDATE: ensure stroke color is not destroyed is a pattern 1359fd706f930f397221c6ba26f112e96e262fb0ba2eanthony is given. Just in case the color is also used for other purposes. 1360afbaed757145095f09d6d614653ed3b58068cb3banthony */ 136172feaa664126c198b9ccd072b6ef181338a76c6canthony MagickBooleanType 136272feaa664126c198b9ccd072b6ef181338a76c6canthony status; 1363afbaed757145095f09d6d614653ed3b58068cb3banthony 1364afbaed757145095f09d6d614653ed3b58068cb3banthony ExceptionInfo 1365afbaed757145095f09d6d614653ed3b58068cb3banthony *sans; 1366afbaed757145095f09d6d614653ed3b58068cb3banthony 1367fd706f930f397221c6ba26f112e96e262fb0ba2eanthony PixelInfo 1368fd706f930f397221c6ba26f112e96e262fb0ba2eanthony color; 1369fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 13702a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony arg1 = ArgOption("none"); /* +fill turns it off! */ 13712a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (void) SetImageOption(_image_info,option+1,arg1); 137292c93bd35e207736d340f1b32000006a5bf6208eanthony if (_draw_info->stroke_pattern != (Image *) NULL) 137392c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->stroke_pattern=DestroyImage(_draw_info->stroke_pattern); 137472feaa664126c198b9ccd072b6ef181338a76c6canthony 137572feaa664126c198b9ccd072b6ef181338a76c6canthony /* is it a color or a image? -- ignore exceptions */ 1376afbaed757145095f09d6d614653ed3b58068cb3banthony sans=AcquireExceptionInfo(); 13772a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony status=QueryColorCompliance(arg1,AllCompliance,&color,sans); 1378afbaed757145095f09d6d614653ed3b58068cb3banthony sans=DestroyExceptionInfo(sans); 1379fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 13805d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (status == MagickFalse) 13812a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony _draw_info->stroke_pattern=GetImageCache(_image_info,arg1,_exception); 1382fd706f930f397221c6ba26f112e96e262fb0ba2eanthony else 138392c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->stroke=color; 1384805a2d48e7e2ed7d699871183ed706699119281canthony break; 1385805a2d48e7e2ed7d699871183ed706699119281canthony } 1386afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("strokewidth",option+1) == 0) 1387805a2d48e7e2ed7d699871183ed706699119281canthony { 13885d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 1389f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 139092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 139192c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->stroke_width=StringToDouble(ArgOption("1.0"), 139272feaa664126c198b9ccd072b6ef181338a76c6canthony (char **) NULL); 1393afbaed757145095f09d6d614653ed3b58068cb3banthony break; 1394afbaed757145095f09d6d614653ed3b58068cb3banthony } 1395afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("style",option+1) == 0) 1396afbaed757145095f09d6d614653ed3b58068cb3banthony { 1397f42014dc55e8d21355ea3d17372e2d9c14b07641anthony arg1=ArgOption("undefined"); 1398f42014dc55e8d21355ea3d17372e2d9c14b07641anthony parse = ParseCommandOption(MagickStyleOptions,MagickFalse,arg1); 1399f42014dc55e8d21355ea3d17372e2d9c14b07641anthony if (parse < 0) 1400f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedStyleType", 1401f42014dc55e8d21355ea3d17372e2d9c14b07641anthony option,arg1); 1402f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _draw_info->style=(StyleType) parse; 1403805a2d48e7e2ed7d699871183ed706699119281canthony break; 1404805a2d48e7e2ed7d699871183ed706699119281canthony } 1405cd358fcc24e0be863b1d6e1917e799fc04add92aanthony#if 0 1406b1d483a6a6a5678173db9d60bec52dd5a37826beanthony if (LocaleCompare("subimage-search",option+1) == 0) 1407b1d483a6a6a5678173db9d60bec52dd5a37826beanthony { 1408b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* FUTURE: this is only used by CompareImages() which is used 1409b1d483a6a6a5678173db9d60bec52dd5a37826beanthony only by the "compare" CLI program at this time. */ 1410b1d483a6a6a5678173db9d60bec52dd5a37826beanthony (void) SetImageOption(_image_info,option+1,ArgBooleanString); 1411b1d483a6a6a5678173db9d60bec52dd5a37826beanthony break; 1412b1d483a6a6a5678173db9d60bec52dd5a37826beanthony } 1413cd358fcc24e0be863b1d6e1917e799fc04add92aanthony#endif 1414afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("synchronize",option+1) == 0) 1415805a2d48e7e2ed7d699871183ed706699119281canthony { 1416f42014dc55e8d21355ea3d17372e2d9c14b07641anthony /* FUTURE: syncronize to storage - but what does that mean? */ 141792c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->synchronize = ArgBoolean; 1418805a2d48e7e2ed7d699871183ed706699119281canthony break; 1419805a2d48e7e2ed7d699871183ed706699119281canthony } 1420ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1421805a2d48e7e2ed7d699871183ed706699119281canthony } 1422805a2d48e7e2ed7d699871183ed706699119281canthony case 't': 1423805a2d48e7e2ed7d699871183ed706699119281canthony { 1424afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("taint",option+1) == 0) 1425805a2d48e7e2ed7d699871183ed706699119281canthony { 142672feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. */ 142792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgBooleanString); 1428805a2d48e7e2ed7d699871183ed706699119281canthony break; 1429805a2d48e7e2ed7d699871183ed706699119281canthony } 1430afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("texture",option+1) == 0) 1431805a2d48e7e2ed7d699871183ed706699119281canthony { 14324837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 143352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony /* FUTURE: move _image_info string to option splay-tree 143452bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony Other than "montage" what uses "texture" ???? 143552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony */ 143692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image_info->texture,ArgOption(NULL)); 1437afbaed757145095f09d6d614653ed3b58068cb3banthony break; 1438afbaed757145095f09d6d614653ed3b58068cb3banthony } 1439afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("tile",option+1) == 0) 1440afbaed757145095f09d6d614653ed3b58068cb3banthony { 14414837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 144292c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->fill_pattern=IfSetOption 144392c93bd35e207736d340f1b32000006a5bf6208eanthony ?GetImageCache(_image_info,arg1,_exception) 144492c93bd35e207736d340f1b32000006a5bf6208eanthony :DestroyImage(_draw_info->fill_pattern); 1445805a2d48e7e2ed7d699871183ed706699119281canthony break; 1446805a2d48e7e2ed7d699871183ed706699119281canthony } 1447afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("tile-offset",option+1) == 0) 1448805a2d48e7e2ed7d699871183ed706699119281canthony { 144972feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. ??? */ 145052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony arg1=ArgOption("0"); 14515d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 145252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 145352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony (void) SetImageOption(_image_info,option+1,arg1); 1454805a2d48e7e2ed7d699871183ed706699119281canthony break; 1455805a2d48e7e2ed7d699871183ed706699119281canthony } 1456afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("transparent-color",option+1) == 0) 1457805a2d48e7e2ed7d699871183ed706699119281canthony { 145892c93bd35e207736d340f1b32000006a5bf6208eanthony /* FUTURE: both _image_info attribute & ImageOption in use! 145992c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info only used for generating new images. 146072feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 146172feaa664126c198b9ccd072b6ef181338a76c6canthony 1462afbaed757145095f09d6d614653ed3b58068cb3banthony Note that +transparent-color, means fall-back to image 1463afbaed757145095f09d6d614653ed3b58068cb3banthony attribute so ImageOption is deleted, not set to a default. 1464afbaed757145095f09d6d614653ed3b58068cb3banthony */ 14655d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfSetOption && (IsGeometry(arg1) == MagickFalse)) 146652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 146792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 146872feaa664126c198b9ccd072b6ef181338a76c6canthony (void) QueryColorCompliance(ArgOption("none"),AllCompliance, 146992c93bd35e207736d340f1b32000006a5bf6208eanthony &_image_info->transparent_color,_exception); 1470805a2d48e7e2ed7d699871183ed706699119281canthony break; 1471805a2d48e7e2ed7d699871183ed706699119281canthony } 1472afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("treedepth",option+1) == 0) 147331f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 147492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 147592c93bd35e207736d340f1b32000006a5bf6208eanthony _quantize_info->tree_depth=StringToUnsignedLong(ArgOption("0")); 147631f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 147731f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 1478afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("type",option+1) == 0) 1479805a2d48e7e2ed7d699871183ed706699119281canthony { 148072feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. */ 148152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony parse=ParseCommandOption(MagickTypeOptions,MagickFalse, 148252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony ArgOption("undefined")); 148352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony if (parse < 0) 148452bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"UnrecognizedImageType", 148552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony option,arg1); 148652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony _image_info->type=(ImageType) parse; 148792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1488805a2d48e7e2ed7d699871183ed706699119281canthony break; 1489805a2d48e7e2ed7d699871183ed706699119281canthony } 1490ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1491805a2d48e7e2ed7d699871183ed706699119281canthony } 1492805a2d48e7e2ed7d699871183ed706699119281canthony case 'u': 1493805a2d48e7e2ed7d699871183ed706699119281canthony { 1494afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("undercolor",option+1) == 0) 1495805a2d48e7e2ed7d699871183ed706699119281canthony { 149692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 149772feaa664126c198b9ccd072b6ef181338a76c6canthony (void) QueryColorCompliance(ArgOption("none"),AllCompliance, 149892c93bd35e207736d340f1b32000006a5bf6208eanthony &_draw_info->undercolor,_exception); 1499805a2d48e7e2ed7d699871183ed706699119281canthony break; 1500805a2d48e7e2ed7d699871183ed706699119281canthony } 1501afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("units",option+1) == 0) 1502805a2d48e7e2ed7d699871183ed706699119281canthony { 150372feaa664126c198b9ccd072b6ef181338a76c6canthony /* SyncImageSettings() used to set per-image attribute. 150492c93bd35e207736d340f1b32000006a5bf6208eanthony Should this effect _draw_info X and Y resolution? 150572feaa664126c198b9ccd072b6ef181338a76c6canthony FUTURE: this probably should be part of the density setting 150672feaa664126c198b9ccd072b6ef181338a76c6canthony */ 150752bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony parse=ParseCommandOption(MagickResolutionOptions,MagickFalse, 150852bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony ArgOption("undefined")); 150952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony if (parse < 0) 151052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"UnrecognizedUnitsType", 151152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony option,arg1); 151252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony _image_info->units=(ResolutionType) parse; 151392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1514805a2d48e7e2ed7d699871183ed706699119281canthony break; 1515805a2d48e7e2ed7d699871183ed706699119281canthony } 1516ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1517805a2d48e7e2ed7d699871183ed706699119281canthony } 1518805a2d48e7e2ed7d699871183ed706699119281canthony case 'v': 1519805a2d48e7e2ed7d699871183ed706699119281canthony { 1520afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("verbose",option+1) == 0) 1521805a2d48e7e2ed7d699871183ed706699119281canthony { 152224aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony /* FUTURE: Remember all options become image artifacts 152392c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->verbose is only used by coders. 1524ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony */ 152592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgBooleanString); 152692c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->verbose= ArgBoolean; 152792c93bd35e207736d340f1b32000006a5bf6208eanthony _image_info->ping=MagickFalse; /* verbose can't be a ping */ 1528805a2d48e7e2ed7d699871183ed706699119281canthony break; 1529805a2d48e7e2ed7d699871183ed706699119281canthony } 1530afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("virtual-pixel",option+1) == 0) 1531805a2d48e7e2ed7d699871183ed706699119281canthony { 1532fd706f930f397221c6ba26f112e96e262fb0ba2eanthony /* SyncImageSettings() used to set per-image attribute. 1533fd706f930f397221c6ba26f112e96e262fb0ba2eanthony This is VERY deep in the image caching structure. 1534fd706f930f397221c6ba26f112e96e262fb0ba2eanthony */ 153552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony parse=ParseCommandOption(MagickVirtualPixelOptions,MagickFalse, 153652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony ArgOption("undefined")); 153752bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony if (parse < 0) 153852bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"UnrecognizedVirtualPixelMethod", 153952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony option,arg1); 154092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageOption(_image_info,option+1,ArgOption(NULL)); 1541805a2d48e7e2ed7d699871183ed706699119281canthony break; 1542805a2d48e7e2ed7d699871183ed706699119281canthony } 1543ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1544805a2d48e7e2ed7d699871183ed706699119281canthony } 1545805a2d48e7e2ed7d699871183ed706699119281canthony case 'w': 1546805a2d48e7e2ed7d699871183ed706699119281canthony { 1547afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("weight",option+1) == 0) 1548ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony { 15495acf702fa2aa906dc44bd26edc57023344e8b77adirk ssize_t 15505acf702fa2aa906dc44bd26edc57023344e8b77adirk weight; 15515acf702fa2aa906dc44bd26edc57023344e8b77adirk 15525acf702fa2aa906dc44bd26edc57023344e8b77adirk weight=ParseCommandOption(MagickWeightOptions,MagickFalse,arg1); 15535acf702fa2aa906dc44bd26edc57023344e8b77adirk if (weight == -1) 155423446631cb3aebb2403aaef5337136ce5f0d24deCristy weight=(ssize_t) StringToUnsignedLong(arg1); 15555acf702fa2aa906dc44bd26edc57023344e8b77adirk _draw_info->weight=(size_t) weight; 1556ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony break; 1557ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony } 1558afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("white-point",option+1) == 0) 1559805a2d48e7e2ed7d699871183ed706699119281canthony { 156072feaa664126c198b9ccd072b6ef181338a76c6canthony /* Used as a image chromaticity setting 156172feaa664126c198b9ccd072b6ef181338a76c6canthony SyncImageSettings() used to set per-image attribute. 156272feaa664126c198b9ccd072b6ef181338a76c6canthony */ 156352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony arg1=ArgOption("0.0"); 15645d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 156552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 156652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony (void) SetImageOption(_image_info,option+1,arg1); 1567805a2d48e7e2ed7d699871183ed706699119281canthony break; 1568805a2d48e7e2ed7d699871183ed706699119281canthony } 1569ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1570805a2d48e7e2ed7d699871183ed706699119281canthony } 1571805a2d48e7e2ed7d699871183ed706699119281canthony default: 1572ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1573805a2d48e7e2ed7d699871183ed706699119281canthony } 157424aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony 15754837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* clean up percent escape interpreted strings */ 1576862fc616586b318a46843a1e3bf514a2f40c48aecristy if ((arg1 && arg1n) && (arg1 != arg1n )) 1577862fc616586b318a46843a1e3bf514a2f40c48aecristy arg1=DestroyString((char *) arg1); 1578862fc616586b318a46843a1e3bf514a2f40c48aecristy if ((arg2 && arg2n) && (arg2 != arg2n )) 1579862fc616586b318a46843a1e3bf514a2f40c48aecristy arg2=DestroyString((char *) arg2); 15804837ac2f5e9dbb766129a91aa11cf7c547477119anthony 158192c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image_info 158292c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception 158392c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _draw_info 158492c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _quantize_info 1585fd706f930f397221c6ba26f112e96e262fb0ba2eanthony#undef IfSetOption 1586fd706f930f397221c6ba26f112e96e262fb0ba2eanthony#undef ArgBoolean 158724aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#undef ArgBooleanNot 158824aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#undef ArgBooleanString 158924aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony#undef ArgOption 1590fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 159131f1bf7bb6ee2698a2afab42ee0329b11663636canthony return; 1592805a2d48e7e2ed7d699871183ed706699119281canthony} 1593805a2d48e7e2ed7d699871183ed706699119281canthony 1594805a2d48e7e2ed7d699871183ed706699119281canthony/* 1595805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1596805a2d48e7e2ed7d699871183ed706699119281canthony% % 1597805a2d48e7e2ed7d699871183ed706699119281canthony% % 1598805a2d48e7e2ed7d699871183ed706699119281canthony% % 159943f425dd7d5b33887726982b28ebfa06f5560636anthony+ C L I S i m p l e O p e r a t o r I m a g e s % 1600805a2d48e7e2ed7d699871183ed706699119281canthony% % 1601805a2d48e7e2ed7d699871183ed706699119281canthony% % 1602805a2d48e7e2ed7d699871183ed706699119281canthony% % 1603805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1604805a2d48e7e2ed7d699871183ed706699119281canthony% 1605c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% CLISimpleOperatorImages() applys one simple image operation given to all 1606c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% the images in the CLI wand, using any per-image or global settings that was 1607c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% previously saved in the CLI wand. 1608dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony% 1609c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% It is assumed that any such settings are up-to-date. 1610805a2d48e7e2ed7d699871183ed706699119281canthony% 16117a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony% The format of the WandSimpleOperatorImages method is: 1612805a2d48e7e2ed7d699871183ed706699119281canthony% 161352b632a875d61ac705bca7ad2b0919f90112eef9cristy% MagickBooleanType CLISimpleOperatorImages(MagickCLI *cli_wand,const char *option, 16142c57b74e160f9b605d74dec24081309f28b83899cristy% const char *arg1, const char *arg2,ExceptionInfo *exception) 1615805a2d48e7e2ed7d699871183ed706699119281canthony% 1616805a2d48e7e2ed7d699871183ed706699119281canthony% A description of each parameter follows: 1617805a2d48e7e2ed7d699871183ed706699119281canthony% 161843f425dd7d5b33887726982b28ebfa06f5560636anthony% o cli_wand: structure holding settings and images to be operated on 1619dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony% 1620fd706f930f397221c6ba26f112e96e262fb0ba2eanthony% o option: The option string for the operation 1621805a2d48e7e2ed7d699871183ed706699119281canthony% 1622fd706f930f397221c6ba26f112e96e262fb0ba2eanthony% o arg1, arg2: optional argument strings to the operation 1623805a2d48e7e2ed7d699871183ed706699119281canthony% 1624805a2d48e7e2ed7d699871183ed706699119281canthony*/ 162531f1bf7bb6ee2698a2afab42ee0329b11663636canthony 162631f1bf7bb6ee2698a2afab42ee0329b11663636canthony/* 1627c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony CLISimpleOperatorImage() is an Internal subrountine to apply one simple 1628c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony image operation to the current image pointed to by the CLI wand. 162931f1bf7bb6ee2698a2afab42ee0329b11663636canthony 163031f1bf7bb6ee2698a2afab42ee0329b11663636canthony The image in the list may be modified in three different ways... 163131f1bf7bb6ee2698a2afab42ee0329b11663636canthony * directly modified (EG: -negate, -gamma, -level, -annotate, -draw), 163231f1bf7bb6ee2698a2afab42ee0329b11663636canthony * replaced by a new image (EG: -spread, -resize, -rotate, -morphology) 163331f1bf7bb6ee2698a2afab42ee0329b11663636canthony * one image replace by a list of images (-separate and -crop only!) 163431f1bf7bb6ee2698a2afab42ee0329b11663636canthony 1635afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony In each case the result replaces the single original image in the list, as 1636afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony well as the pointer to the modified image (last image added if replaced by a 1637afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony list of images) is returned. 163831f1bf7bb6ee2698a2afab42ee0329b11663636canthony 163931f1bf7bb6ee2698a2afab42ee0329b11663636canthony As the image pointed to may be replaced, the first image in the list may 164031f1bf7bb6ee2698a2afab42ee0329b11663636canthony also change. GetFirstImageInList() should be used by caller if they wish 164131f1bf7bb6ee2698a2afab42ee0329b11663636canthony return the Image pointer to the first image in list. 164231f1bf7bb6ee2698a2afab42ee0329b11663636canthony*/ 1643fe83185ff915c87796df33a8d90a1e0937b3d76fcristystatic MagickBooleanType CLISimpleOperatorImage(MagickCLI *cli_wand, 16442c57b74e160f9b605d74dec24081309f28b83899cristy const char *option, const char *arg1n, const char *arg2n, 16452c57b74e160f9b605d74dec24081309f28b83899cristy ExceptionInfo *exception) 1646805a2d48e7e2ed7d699871183ed706699119281canthony{ 1647805a2d48e7e2ed7d699871183ed706699119281canthony Image * 1648805a2d48e7e2ed7d699871183ed706699119281canthony new_image; 1649805a2d48e7e2ed7d699871183ed706699119281canthony 1650805a2d48e7e2ed7d699871183ed706699119281canthony GeometryInfo 1651805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info; 1652805a2d48e7e2ed7d699871183ed706699119281canthony 1653805a2d48e7e2ed7d699871183ed706699119281canthony RectangleInfo 1654805a2d48e7e2ed7d699871183ed706699119281canthony geometry; 1655805a2d48e7e2ed7d699871183ed706699119281canthony 1656805a2d48e7e2ed7d699871183ed706699119281canthony MagickStatusType 1657805a2d48e7e2ed7d699871183ed706699119281canthony flags; 1658805a2d48e7e2ed7d699871183ed706699119281canthony 165992c93bd35e207736d340f1b32000006a5bf6208eanthony ssize_t 16602a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony parse; 166192c93bd35e207736d340f1b32000006a5bf6208eanthony 1662a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char /* percent escaped versions of the args */ 1663964d28ed4391c639c60c392807c9dfb09f933ba8anthony *arg1, 1664964d28ed4391c639c60c392807c9dfb09f933ba8anthony *arg2; 1665964d28ed4391c639c60c392807c9dfb09f933ba8anthony 1666a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _image_info (cli_wand->wand.image_info) 1667a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _image (cli_wand->wand.images) 1668a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _exception (cli_wand->wand.exception) 1669a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _draw_info (cli_wand->draw_info) 1670a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _quantize_info (cli_wand->quantize_info) 1671a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _process_flags (cli_wand->process_flags) 1672a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _option_type ((CommandOptionFlags) cli_wand->command->flags) 1673a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define IfNormalOp (*option=='-') 1674a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define IfPlusOp (*option!='-') 1675b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define IsNormalOp IfNormalOp ? MagickTrue : MagickFalse 1676b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define IsPlusOp IfNormalOp ? MagickFalse : MagickTrue 1677fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 167843f425dd7d5b33887726982b28ebfa06f5560636anthony assert(cli_wand != (MagickCLI *) NULL); 1679e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->signature == MagickWandSignature); 1680e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->wand.signature == MagickWandSignature); 16815330ae0b1ea1824ec58522aebfd27228592ad0a4anthony assert(_image != (Image *) NULL); /* an image must be present */ 1682d0792939dc18eff319129903f2627bd882a574aadirk if (cli_wand->wand.debug != MagickFalse) 168343f425dd7d5b33887726982b28ebfa06f5560636anthony (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",cli_wand->wand.name); 1684dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony 1685964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1 = arg1n, 1686964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2 = arg2n; 1687a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 1688a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* Interpret Percent Escapes in Arguments - using first image */ 1689964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( (((_process_flags & ProcessInterpretProperities) != 0 ) 1690964d28ed4391c639c60c392807c9dfb09f933ba8anthony || ((_option_type & AlwaysInterpretArgsFlag) != 0) 1691964d28ed4391c639c60c392807c9dfb09f933ba8anthony ) && ((_option_type & NeverInterpretArgsFlag) == 0) ) { 1692964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* Interpret Percent escapes in argument 1 */ 1693964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg1n != (char *) NULL) { 1694964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=InterpretImageProperties(_image_info,_image,arg1n,_exception); 1695964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg1 == (char *) NULL) { 1696964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 1697964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=arg1n; /* use the given argument as is */ 1698964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 1699964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 1700964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg2n != (char *) NULL) { 1701964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=InterpretImageProperties(_image_info,_image,arg2n,_exception); 1702964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg2 == (char *) NULL) { 1703964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 1704964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=arg2n; /* use the given argument as is */ 1705964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 1706964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 1707964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 17084837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags 1709964d28ed4391c639c60c392807c9dfb09f933ba8anthony#undef _option_type 1710964d28ed4391c639c60c392807c9dfb09f933ba8anthony 1711964d28ed4391c639c60c392807c9dfb09f933ba8anthony#if 0 1712964d28ed4391c639c60c392807c9dfb09f933ba8anthony (void) FormatLocaleFile(stderr, 1713964d28ed4391c639c60c392807c9dfb09f933ba8anthony "CLISimpleOperatorImage: \"%s\" \"%s\" \"%s\"\n",option,arg1,arg2); 1714964d28ed4391c639c60c392807c9dfb09f933ba8anthony#endif 1715805a2d48e7e2ed7d699871183ed706699119281canthony 1716f432c635c526259b858c9aad3d409c5c44545686cristy new_image = (Image *) NULL; /* the replacement image, if not null at end */ 1717964d28ed4391c639c60c392807c9dfb09f933ba8anthony SetGeometryInfo(&geometry_info); 1718dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony 1719afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony switch (*(option+1)) 1720805a2d48e7e2ed7d699871183ed706699119281canthony { 1721805a2d48e7e2ed7d699871183ed706699119281canthony case 'a': 1722805a2d48e7e2ed7d699871183ed706699119281canthony { 1723afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("adaptive-blur",option+1) == 0) 1724805a2d48e7e2ed7d699871183ed706699119281canthony { 1725fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 172622de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 172722de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1728805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 1729805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 173092c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=AdaptiveBlurImage(_image,geometry_info.rho, 1731aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy geometry_info.sigma,_exception); 1732805a2d48e7e2ed7d699871183ed706699119281canthony break; 1733805a2d48e7e2ed7d699871183ed706699119281canthony } 1734afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("adaptive-resize",option+1) == 0) 1735805a2d48e7e2ed7d699871183ed706699119281canthony { 1736fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony /* FUTURE: Roll into a resize special operator */ 17375d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 173892c93bd35e207736d340f1b32000006a5bf6208eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 173992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseRegionGeometry(_image,arg1,&geometry,_exception); 174092c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=AdaptiveResizeImage(_image,geometry.width,geometry.height, 1741aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy _exception); 1742805a2d48e7e2ed7d699871183ed706699119281canthony break; 1743805a2d48e7e2ed7d699871183ed706699119281canthony } 1744afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("adaptive-sharpen",option+1) == 0) 1745805a2d48e7e2ed7d699871183ed706699119281canthony { 1746fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 174722de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 174822de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1749805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 1750805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 175192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=AdaptiveSharpenImage(_image,geometry_info.rho, 1752aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy geometry_info.sigma,_exception); 1753805a2d48e7e2ed7d699871183ed706699119281canthony break; 1754805a2d48e7e2ed7d699871183ed706699119281canthony } 1755afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("alpha",option+1) == 0) 1756805a2d48e7e2ed7d699871183ed706699119281canthony { 1757288a3536ebe731f83c57b0856e64216b98e19362cristy parse=ParseCommandOption(MagickAlphaChannelOptions,MagickFalse,arg1); 17582a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony if (parse < 0) 1759b15b06c9f7ba2bf0e0ebcd88d0175536a5392c93cristy CLIWandExceptArgBreak(OptionError,"UnrecognizedAlphaChannelOption", 17604366cb8362807701d417c990eaf5bfe5dcec2282cristy option,arg1); 17614366cb8362807701d417c990eaf5bfe5dcec2282cristy (void) SetImageAlphaChannel(_image,(AlphaChannelOption) parse, 176261d844eb252f4eca2241e151c46b3b718af2182dcristy _exception); 1763805a2d48e7e2ed7d699871183ed706699119281canthony break; 1764805a2d48e7e2ed7d699871183ed706699119281canthony } 1765afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("annotate",option+1) == 0) 1766805a2d48e7e2ed7d699871183ed706699119281canthony { 1767805a2d48e7e2ed7d699871183ed706699119281canthony char 1768151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy geometry[MagickPathExtent]; 1769805a2d48e7e2ed7d699871183ed706699119281canthony 1770805a2d48e7e2ed7d699871183ed706699119281canthony SetGeometryInfo(&geometry_info); 1771fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 17728592b059b2b4f03c0280b0e1146b225207e624f8cristy if (flags == 0) 177322de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1774805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 1775805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=geometry_info.rho; 1776964d28ed4391c639c60c392807c9dfb09f933ba8anthony (void) CloneString(&_draw_info->text,arg2); 1777151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(geometry,MagickPathExtent,"%+f%+f", 1778805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi,geometry_info.psi); 177992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->geometry,geometry); 178092c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->affine.sx=cos(DegreesToRadians( 1781805a2d48e7e2ed7d699871183ed706699119281canthony fmod(geometry_info.rho,360.0))); 178292c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->affine.rx=sin(DegreesToRadians( 1783805a2d48e7e2ed7d699871183ed706699119281canthony fmod(geometry_info.rho,360.0))); 178492c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->affine.ry=(-sin(DegreesToRadians( 1785805a2d48e7e2ed7d699871183ed706699119281canthony fmod(geometry_info.sigma,360.0)))); 178692c93bd35e207736d340f1b32000006a5bf6208eanthony _draw_info->affine.sy=cos(DegreesToRadians( 1787805a2d48e7e2ed7d699871183ed706699119281canthony fmod(geometry_info.sigma,360.0))); 178892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) AnnotateImage(_image,_draw_info,_exception); 178992c93bd35e207736d340f1b32000006a5bf6208eanthony GetAffineMatrix(&_draw_info->affine); 1790805a2d48e7e2ed7d699871183ed706699119281canthony break; 1791805a2d48e7e2ed7d699871183ed706699119281canthony } 1792afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("auto-gamma",option+1) == 0) 1793805a2d48e7e2ed7d699871183ed706699119281canthony { 179492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) AutoGammaImage(_image,_exception); 1795805a2d48e7e2ed7d699871183ed706699119281canthony break; 1796805a2d48e7e2ed7d699871183ed706699119281canthony } 1797afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("auto-level",option+1) == 0) 1798805a2d48e7e2ed7d699871183ed706699119281canthony { 179992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) AutoLevelImage(_image,_exception); 1800805a2d48e7e2ed7d699871183ed706699119281canthony break; 1801805a2d48e7e2ed7d699871183ed706699119281canthony } 1802afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("auto-orient",option+1) == 0) 1803805a2d48e7e2ed7d699871183ed706699119281canthony { 1804fa5f6c7d8951fffaccad70fa706701129f0a82bfcristy new_image=AutoOrientImage(_image,_image->orientation,_exception); 1805805a2d48e7e2ed7d699871183ed706699119281canthony break; 1806805a2d48e7e2ed7d699871183ed706699119281canthony } 1807ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1808805a2d48e7e2ed7d699871183ed706699119281canthony } 1809805a2d48e7e2ed7d699871183ed706699119281canthony case 'b': 1810805a2d48e7e2ed7d699871183ed706699119281canthony { 1811afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("black-threshold",option+1) == 0) 1812805a2d48e7e2ed7d699871183ed706699119281canthony { 18135d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 18145330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 181592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) BlackThresholdImage(_image,arg1,_exception); 1816805a2d48e7e2ed7d699871183ed706699119281canthony break; 1817805a2d48e7e2ed7d699871183ed706699119281canthony } 1818afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("blue-shift",option+1) == 0) 1819805a2d48e7e2ed7d699871183ed706699119281canthony { 1820805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.rho=1.5; 18215330ae0b1ea1824ec58522aebfd27228592ad0a4anthony if (IfNormalOp) { 1822fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 182322de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 182422de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 18255330ae0b1ea1824ec58522aebfd27228592ad0a4anthony } 182692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=BlueShiftImage(_image,geometry_info.rho,_exception); 1827805a2d48e7e2ed7d699871183ed706699119281canthony break; 1828805a2d48e7e2ed7d699871183ed706699119281canthony } 1829afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("blur",option+1) == 0) 1830805a2d48e7e2ed7d699871183ed706699119281canthony { 1831fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 183222de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 183322de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1834805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 1835805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 1836aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy new_image=BlurImage(_image,geometry_info.rho,geometry_info.sigma, 1837aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy _exception); 1838805a2d48e7e2ed7d699871183ed706699119281canthony break; 1839805a2d48e7e2ed7d699871183ed706699119281canthony } 1840afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("border",option+1) == 0) 1841805a2d48e7e2ed7d699871183ed706699119281canthony { 184231f1bf7bb6ee2698a2afab42ee0329b11663636canthony CompositeOperator 18435f867ae6899e46eb35c30b38e9479312880608cfanthony compose; 18445f867ae6899e46eb35c30b38e9479312880608cfanthony 18455f867ae6899e46eb35c30b38e9479312880608cfanthony const char* 18465f867ae6899e46eb35c30b38e9479312880608cfanthony value; 18475f867ae6899e46eb35c30b38e9479312880608cfanthony 184822de2722b682eb405b60ec6022a7546df994674eanthony flags=ParsePageGeometry(_image,arg1,&geometry,_exception); 184964ad8f928c50680fcbd1aa3b433deae984348f89cristy if ((flags & (WidthValue | HeightValue)) == 0) 18505330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 185164ad8f928c50680fcbd1aa3b433deae984348f89cristy compose=OverCompositeOp; 185292c93bd35e207736d340f1b32000006a5bf6208eanthony value=GetImageOption(_image_info,"compose"); 18535f867ae6899e46eb35c30b38e9479312880608cfanthony if (value != (const char *) NULL) 185464ad8f928c50680fcbd1aa3b433deae984348f89cristy compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions, 185564ad8f928c50680fcbd1aa3b433deae984348f89cristy MagickFalse,value); 185692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=BorderImage(_image,&geometry,compose,_exception); 1857805a2d48e7e2ed7d699871183ed706699119281canthony break; 1858805a2d48e7e2ed7d699871183ed706699119281canthony } 1859afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("brightness-contrast",option+1) == 0) 1860805a2d48e7e2ed7d699871183ed706699119281canthony { 1861805a2d48e7e2ed7d699871183ed706699119281canthony double 1862805a2d48e7e2ed7d699871183ed706699119281canthony brightness, 1863805a2d48e7e2ed7d699871183ed706699119281canthony contrast; 1864805a2d48e7e2ed7d699871183ed706699119281canthony 1865805a2d48e7e2ed7d699871183ed706699119281canthony GeometryInfo 1866805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info; 1867805a2d48e7e2ed7d699871183ed706699119281canthony 1868805a2d48e7e2ed7d699871183ed706699119281canthony MagickStatusType 1869805a2d48e7e2ed7d699871183ed706699119281canthony flags; 1870805a2d48e7e2ed7d699871183ed706699119281canthony 1871fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 187222de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 187322de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1874805a2d48e7e2ed7d699871183ed706699119281canthony brightness=geometry_info.rho; 1875805a2d48e7e2ed7d699871183ed706699119281canthony contrast=0.0; 1876805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) != 0) 1877805a2d48e7e2ed7d699871183ed706699119281canthony contrast=geometry_info.sigma; 187892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) BrightnessContrastImage(_image,brightness,contrast, 187992c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 1880805a2d48e7e2ed7d699871183ed706699119281canthony break; 1881805a2d48e7e2ed7d699871183ed706699119281canthony } 1882ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 1883805a2d48e7e2ed7d699871183ed706699119281canthony } 1884805a2d48e7e2ed7d699871183ed706699119281canthony case 'c': 1885805a2d48e7e2ed7d699871183ed706699119281canthony { 18864ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy if (LocaleCompare("canny",option+1) == 0) 18874ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy { 18884ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy flags=ParseGeometry(arg1,&geometry_info); 18894ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy if ((flags & (RhoValue|SigmaValue)) == 0) 18904ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 18914ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy if ((flags & SigmaValue) == 0) 18924ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy geometry_info.sigma=1.0; 18934ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy if ((flags & XiValue) == 0) 18942fc10e5aedab9144531a4668dc7526e3caf514e1cristy geometry_info.xi=10; 18954ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy if ((flags & PsiValue) == 0) 18962fc10e5aedab9144531a4668dc7526e3caf514e1cristy geometry_info.psi=30; 18972b72f797824e3f3650c2499c113e86a4dce5a0e1cristy if ((flags & PercentValue) != 0) 18982b72f797824e3f3650c2499c113e86a4dce5a0e1cristy { 189941814f2acd4293e7c139946773ef710527041581cristy geometry_info.xi/=100.0; 190041814f2acd4293e7c139946773ef710527041581cristy geometry_info.psi/=100.0; 19012b72f797824e3f3650c2499c113e86a4dce5a0e1cristy } 190241814f2acd4293e7c139946773ef710527041581cristy new_image=CannyEdgeImage(_image,geometry_info.rho,geometry_info.sigma, 190341814f2acd4293e7c139946773ef710527041581cristy geometry_info.xi,geometry_info.psi,_exception); 19044ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy break; 19054ceadb87d6f921f481f1f9e82bcbb23c962e6e96cristy } 1906afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("cdl",option+1) == 0) 1907805a2d48e7e2ed7d699871183ed706699119281canthony { 19084837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 1909805a2d48e7e2ed7d699871183ed706699119281canthony char 1910805a2d48e7e2ed7d699871183ed706699119281canthony *color_correction_collection; 1911805a2d48e7e2ed7d699871183ed706699119281canthony 1912805a2d48e7e2ed7d699871183ed706699119281canthony /* 1913805a2d48e7e2ed7d699871183ed706699119281canthony Color correct with a color decision list. 1914805a2d48e7e2ed7d699871183ed706699119281canthony */ 19153a5987c75c361dde2b38579f05ca961927d842fecristy color_correction_collection=FileToString(arg1,~0UL,_exception); 1916805a2d48e7e2ed7d699871183ed706699119281canthony if (color_correction_collection == (char *) NULL) 1917805a2d48e7e2ed7d699871183ed706699119281canthony break; 191892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ColorDecisionListImage(_image,color_correction_collection, 191992c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 1920805a2d48e7e2ed7d699871183ed706699119281canthony break; 1921805a2d48e7e2ed7d699871183ed706699119281canthony } 192217ada024a8d39285affcac96ff344f3142c41aadcristy if (LocaleCompare("channel",option+1) == 0) 192317ada024a8d39285affcac96ff344f3142c41aadcristy { 192417ada024a8d39285affcac96ff344f3142c41aadcristy if (IfPlusOp) 192517ada024a8d39285affcac96ff344f3142c41aadcristy { 1926bcd59345f8bbe67289229b663d9bb487cc620e13cristy (void) SetPixelChannelMask(_image,DefaultChannels); 192717ada024a8d39285affcac96ff344f3142c41aadcristy break; 192817ada024a8d39285affcac96ff344f3142c41aadcristy } 192917ada024a8d39285affcac96ff344f3142c41aadcristy parse=ParseChannelOption(arg1); 193017ada024a8d39285affcac96ff344f3142c41aadcristy if (parse < 0) 193117ada024a8d39285affcac96ff344f3142c41aadcristy CLIWandExceptArgBreak(OptionError,"UnrecognizedIntensityMethod", 193217ada024a8d39285affcac96ff344f3142c41aadcristy option,arg1); 1933bcd59345f8bbe67289229b663d9bb487cc620e13cristy (void) SetPixelChannelMask(_image,(ChannelType) parse); 193417ada024a8d39285affcac96ff344f3142c41aadcristy break; 193517ada024a8d39285affcac96ff344f3142c41aadcristy } 1936afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("charcoal",option+1) == 0) 1937805a2d48e7e2ed7d699871183ed706699119281canthony { 1938fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 193922de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 194022de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 1941805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 1942805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 1943805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XiValue) == 0) 1944805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi=1.0; 1945ee3f752fa83a8a26f8db98d8cb1af21fa1e93393cristy new_image=CharcoalImage(_image,geometry_info.rho,geometry_info.sigma, 1946ee3f752fa83a8a26f8db98d8cb1af21fa1e93393cristy _exception); 1947805a2d48e7e2ed7d699871183ed706699119281canthony break; 1948805a2d48e7e2ed7d699871183ed706699119281canthony } 1949afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("chop",option+1) == 0) 1950805a2d48e7e2ed7d699871183ed706699119281canthony { 19515d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 19525330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 195392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseGravityGeometry(_image,arg1,&geometry,_exception); 195492c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ChopImage(_image,&geometry,_exception); 1955805a2d48e7e2ed7d699871183ed706699119281canthony break; 1956805a2d48e7e2ed7d699871183ed706699119281canthony } 1957afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("clamp",option+1) == 0) 1958805a2d48e7e2ed7d699871183ed706699119281canthony { 195992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ClampImage(_image,_exception); 1960805a2d48e7e2ed7d699871183ed706699119281canthony break; 1961805a2d48e7e2ed7d699871183ed706699119281canthony } 1962afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("clip",option+1) == 0) 1963805a2d48e7e2ed7d699871183ed706699119281canthony { 1964afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfNormalOp) 196592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ClipImage(_image,_exception); 196643f425dd7d5b33887726982b28ebfa06f5560636anthony else /* "+mask" remove the write mask */ 1967acd0d4c147f40e88de332ff28d428a395628a9f4cristy (void) SetImageMask(_image,ReadPixelMask,(Image *) NULL,_exception); 1968805a2d48e7e2ed7d699871183ed706699119281canthony break; 1969805a2d48e7e2ed7d699871183ed706699119281canthony } 1970afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("clip-mask",option+1) == 0) 1971805a2d48e7e2ed7d699871183ed706699119281canthony { 19724837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 1973805a2d48e7e2ed7d699871183ed706699119281canthony CacheView 1974805a2d48e7e2ed7d699871183ed706699119281canthony *mask_view; 1975805a2d48e7e2ed7d699871183ed706699119281canthony 1976805a2d48e7e2ed7d699871183ed706699119281canthony Image 1977805a2d48e7e2ed7d699871183ed706699119281canthony *mask_image; 1978805a2d48e7e2ed7d699871183ed706699119281canthony 1979805a2d48e7e2ed7d699871183ed706699119281canthony register Quantum 198005d2ff7ebf21f659f5b11e45afb294e152f4330cdirk *magick_restrict q; 1981805a2d48e7e2ed7d699871183ed706699119281canthony 1982805a2d48e7e2ed7d699871183ed706699119281canthony register ssize_t 1983805a2d48e7e2ed7d699871183ed706699119281canthony x; 1984805a2d48e7e2ed7d699871183ed706699119281canthony 1985805a2d48e7e2ed7d699871183ed706699119281canthony ssize_t 1986805a2d48e7e2ed7d699871183ed706699119281canthony y; 1987805a2d48e7e2ed7d699871183ed706699119281canthony 1988afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfPlusOp) { 19894837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* use "+clip-mask" Remove the write mask for -clip-path */ 1990acd0d4c147f40e88de332ff28d428a395628a9f4cristy (void) SetImageMask(_image,ReadPixelMask,(Image *) NULL,_exception); 1991afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony break; 1992afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony } 199392c93bd35e207736d340f1b32000006a5bf6208eanthony mask_image=GetImageCache(_image_info,arg1,_exception); 1994805a2d48e7e2ed7d699871183ed706699119281canthony if (mask_image == (Image *) NULL) 1995805a2d48e7e2ed7d699871183ed706699119281canthony break; 19965d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (SetImageStorageClass(mask_image,DirectClass,_exception) == MagickFalse) 199731f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 19985330ae0b1ea1824ec58522aebfd27228592ad0a4anthony /* Create a write mask from cli_wand mask image */ 1999fd706f930f397221c6ba26f112e96e262fb0ba2eanthony /* FUTURE: use Alpha operations instead and create a Grey Image */ 200046ff2676b1044ea4101ac7a59b83289cd8f6cfdacristy mask_view=AcquireAuthenticCacheView(mask_image,_exception); 2001805a2d48e7e2ed7d699871183ed706699119281canthony for (y=0; y < (ssize_t) mask_image->rows; y++) 2002805a2d48e7e2ed7d699871183ed706699119281canthony { 2003805a2d48e7e2ed7d699871183ed706699119281canthony q=GetCacheViewAuthenticPixels(mask_view,0,y,mask_image->columns,1, 200492c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 2005805a2d48e7e2ed7d699871183ed706699119281canthony if (q == (Quantum *) NULL) 2006805a2d48e7e2ed7d699871183ed706699119281canthony break; 2007805a2d48e7e2ed7d699871183ed706699119281canthony for (x=0; x < (ssize_t) mask_image->columns; x++) 2008805a2d48e7e2ed7d699871183ed706699119281canthony { 20097d6d3d842e19316bdf35c69a032cd77a40f476aacristy if (mask_image->alpha_trait == UndefinedPixelTrait) 201052b632a875d61ac705bca7ad2b0919f90112eef9cristy SetPixelAlpha(mask_image,(Quantum) 201152b632a875d61ac705bca7ad2b0919f90112eef9cristy GetPixelIntensity(mask_image,q),q); 201281ac79758a008f1ac5bfb5c543ba914e4d617304cristy SetPixelGray(mask_image,GetPixelAlpha(mask_image,q),q); 2013805a2d48e7e2ed7d699871183ed706699119281canthony q+=GetPixelChannels(mask_image); 2014805a2d48e7e2ed7d699871183ed706699119281canthony } 20155d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (SyncCacheViewAuthenticPixels(mask_view,_exception) == MagickFalse) 2016805a2d48e7e2ed7d699871183ed706699119281canthony break; 2017805a2d48e7e2ed7d699871183ed706699119281canthony } 2018fd706f930f397221c6ba26f112e96e262fb0ba2eanthony /* clean up and set the write mask */ 2019805a2d48e7e2ed7d699871183ed706699119281canthony mask_view=DestroyCacheView(mask_view); 20208a46d827a124555f0c48fb2368ec1bba8e079ab6cristy mask_image->alpha_trait=BlendPixelTrait; 202181ac79758a008f1ac5bfb5c543ba914e4d617304cristy (void) SetImageColorspace(_image,GRAYColorspace,_exception); 2022acd0d4c147f40e88de332ff28d428a395628a9f4cristy (void) SetImageMask(_image,ReadPixelMask,mask_image,_exception); 2023805a2d48e7e2ed7d699871183ed706699119281canthony mask_image=DestroyImage(mask_image); 2024805a2d48e7e2ed7d699871183ed706699119281canthony break; 2025805a2d48e7e2ed7d699871183ed706699119281canthony } 2026afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("clip-path",option+1) == 0) 2027805a2d48e7e2ed7d699871183ed706699119281canthony { 2028a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) ClipImagePath(_image,arg1,IsNormalOp,_exception); 20294837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: Use "+clip-mask" remove the write mask added */ 2030805a2d48e7e2ed7d699871183ed706699119281canthony break; 2031805a2d48e7e2ed7d699871183ed706699119281canthony } 2032afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("colorize",option+1) == 0) 2033805a2d48e7e2ed7d699871183ed706699119281canthony { 20345d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 20355330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 203692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ColorizeImage(_image,arg1,&_draw_info->fill,_exception); 2037805a2d48e7e2ed7d699871183ed706699119281canthony break; 2038805a2d48e7e2ed7d699871183ed706699119281canthony } 2039afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("color-matrix",option+1) == 0) 2040805a2d48e7e2ed7d699871183ed706699119281canthony { 2041805a2d48e7e2ed7d699871183ed706699119281canthony KernelInfo 2042805a2d48e7e2ed7d699871183ed706699119281canthony *kernel; 2043805a2d48e7e2ed7d699871183ed706699119281canthony 20442c57b74e160f9b605d74dec24081309f28b83899cristy kernel=AcquireKernelInfo(arg1,exception); 2045805a2d48e7e2ed7d699871183ed706699119281canthony if (kernel == (KernelInfo *) NULL) 20465330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 204792c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ColorMatrixImage(_image,kernel,_exception); 2048805a2d48e7e2ed7d699871183ed706699119281canthony kernel=DestroyKernelInfo(kernel); 2049805a2d48e7e2ed7d699871183ed706699119281canthony break; 2050805a2d48e7e2ed7d699871183ed706699119281canthony } 2051afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("colors",option+1) == 0) 2052805a2d48e7e2ed7d699871183ed706699119281canthony { 20535330ae0b1ea1824ec58522aebfd27228592ad0a4anthony /* Reduce the number of colors in the image. 20545330ae0b1ea1824ec58522aebfd27228592ad0a4anthony FUTURE: also provide 'plus version with image 'color counts' 2055fd706f930f397221c6ba26f112e96e262fb0ba2eanthony */ 205692c93bd35e207736d340f1b32000006a5bf6208eanthony _quantize_info->number_colors=StringToUnsignedLong(arg1); 205792c93bd35e207736d340f1b32000006a5bf6208eanthony if (_quantize_info->number_colors == 0) 20585330ae0b1ea1824ec58522aebfd27228592ad0a4anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 205992c93bd35e207736d340f1b32000006a5bf6208eanthony if ((_image->storage_class == DirectClass) || 206092c93bd35e207736d340f1b32000006a5bf6208eanthony _image->colors > _quantize_info->number_colors) 206192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) QuantizeImage(_quantize_info,_image,_exception); 2062805a2d48e7e2ed7d699871183ed706699119281canthony else 206392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CompressImageColormap(_image,_exception); 2064805a2d48e7e2ed7d699871183ed706699119281canthony break; 2065805a2d48e7e2ed7d699871183ed706699119281canthony } 2066afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("colorspace",option+1) == 0) 2067805a2d48e7e2ed7d699871183ed706699119281canthony { 20685330ae0b1ea1824ec58522aebfd27228592ad0a4anthony /* WARNING: this is both a image_info setting (already done) 20695330ae0b1ea1824ec58522aebfd27228592ad0a4anthony and a operator to change image colorspace. 207031f1bf7bb6ee2698a2afab42ee0329b11663636canthony 207131f1bf7bb6ee2698a2afab42ee0329b11663636canthony FUTURE: default colorspace should be sRGB! 2072d2cdc860e4860173edebd04bf4a33437724edeceanthony Unless some type of 'linear colorspace' mode is set. 207331f1bf7bb6ee2698a2afab42ee0329b11663636canthony 2074d2cdc860e4860173edebd04bf4a33437724edeceanthony Note that +colorspace sets "undefined" or no effect on 2075d2cdc860e4860173edebd04bf4a33437724edeceanthony new images, but forces images already in memory back to RGB! 207631f1bf7bb6ee2698a2afab42ee0329b11663636canthony That seems to be a little strange! 2077d2cdc860e4860173edebd04bf4a33437724edeceanthony */ 207892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) TransformImageColorspace(_image, 2079e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy IfNormalOp ? _image_info->colorspace : sRGBColorspace, 208092c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 20816e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy break; 20826e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy } 20836e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy if (LocaleCompare("connected-components",option+1) == 0) 20846e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy { 20855d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 20866e0b3bcf62017e48472ee5721a7bcc4b10546b12cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 208762e1398b95af43bd1990b6dece2e0e9fb527dd4dCristy new_image=ConnectedComponentsImage(_image,(size_t) 20882ca0e9a086cf4f4d9240132badd01860cb2b5824Cristy StringToInteger(arg1),(CCObjectInfo **) NULL,_exception); 2089805a2d48e7e2ed7d699871183ed706699119281canthony break; 2090805a2d48e7e2ed7d699871183ed706699119281canthony } 2091afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("contrast",option+1) == 0) 2092805a2d48e7e2ed7d699871183ed706699119281canthony { 2093a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony CLIWandWarnReplaced(IfNormalOp?"-level":"+level"); 2094a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) ContrastImage(_image,IsNormalOp,_exception); 2095805a2d48e7e2ed7d699871183ed706699119281canthony break; 2096805a2d48e7e2ed7d699871183ed706699119281canthony } 2097afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("contrast-stretch",option+1) == 0) 2098805a2d48e7e2ed7d699871183ed706699119281canthony { 2099805a2d48e7e2ed7d699871183ed706699119281canthony double 2100805a2d48e7e2ed7d699871183ed706699119281canthony black_point, 2101805a2d48e7e2ed7d699871183ed706699119281canthony white_point; 2102805a2d48e7e2ed7d699871183ed706699119281canthony 2103805a2d48e7e2ed7d699871183ed706699119281canthony MagickStatusType 2104805a2d48e7e2ed7d699871183ed706699119281canthony flags; 2105805a2d48e7e2ed7d699871183ed706699119281canthony 2106fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 210722de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 210822de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2109805a2d48e7e2ed7d699871183ed706699119281canthony black_point=geometry_info.rho; 2110805a2d48e7e2ed7d699871183ed706699119281canthony white_point=(flags & SigmaValue) != 0 ? geometry_info.sigma : 2111805a2d48e7e2ed7d699871183ed706699119281canthony black_point; 2112ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if ((flags & PercentValue) != 0) { 211392c93bd35e207736d340f1b32000006a5bf6208eanthony black_point*=(double) _image->columns*_image->rows/100.0; 211492c93bd35e207736d340f1b32000006a5bf6208eanthony white_point*=(double) _image->columns*_image->rows/100.0; 2115805a2d48e7e2ed7d699871183ed706699119281canthony } 2116496225b3cfefffeefeb82950155012a1e1aa1994cristy white_point=(double) _image->columns*_image->rows-white_point; 211792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ContrastStretchImage(_image,black_point,white_point, 211892c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 2119805a2d48e7e2ed7d699871183ed706699119281canthony break; 2120805a2d48e7e2ed7d699871183ed706699119281canthony } 2121afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("convolve",option+1) == 0) 2122805a2d48e7e2ed7d699871183ed706699119281canthony { 21237792326b1a1fb3357377d8880cc90b275b654246cristy double 21247792326b1a1fb3357377d8880cc90b275b654246cristy gamma; 21257792326b1a1fb3357377d8880cc90b275b654246cristy 2126805a2d48e7e2ed7d699871183ed706699119281canthony KernelInfo 2127805a2d48e7e2ed7d699871183ed706699119281canthony *kernel_info; 21287792326b1a1fb3357377d8880cc90b275b654246cristy 21297792326b1a1fb3357377d8880cc90b275b654246cristy register ssize_t 21307792326b1a1fb3357377d8880cc90b275b654246cristy j; 2131805a2d48e7e2ed7d699871183ed706699119281canthony 21322c57b74e160f9b605d74dec24081309f28b83899cristy kernel_info=AcquireKernelInfo(arg1,exception); 2133805a2d48e7e2ed7d699871183ed706699119281canthony if (kernel_info == (KernelInfo *) NULL) 2134ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 21357792326b1a1fb3357377d8880cc90b275b654246cristy gamma=0.0; 21367792326b1a1fb3357377d8880cc90b275b654246cristy for (j=0; j < (ssize_t) (kernel_info->width*kernel_info->height); j++) 21377792326b1a1fb3357377d8880cc90b275b654246cristy gamma+=kernel_info->values[j]; 21387792326b1a1fb3357377d8880cc90b275b654246cristy gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma); 21397792326b1a1fb3357377d8880cc90b275b654246cristy for (j=0; j < (ssize_t) (kernel_info->width*kernel_info->height); j++) 21407792326b1a1fb3357377d8880cc90b275b654246cristy kernel_info->values[j]*=gamma; 2141a12d8ba3a815842797e8f9d92f52b83c3d1f07a0cristy new_image=MorphologyImage(_image,CorrelateMorphology,1,kernel_info, 2142a12d8ba3a815842797e8f9d92f52b83c3d1f07a0cristy _exception); 2143805a2d48e7e2ed7d699871183ed706699119281canthony kernel_info=DestroyKernelInfo(kernel_info); 2144805a2d48e7e2ed7d699871183ed706699119281canthony break; 2145805a2d48e7e2ed7d699871183ed706699119281canthony } 2146afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("crop",option+1) == 0) 2147805a2d48e7e2ed7d699871183ed706699119281canthony { 214831f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* WARNING: This can generate multiple images! */ 21495d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2150ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 215192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=CropImageToTiles(_image,arg1,_exception); 2152805a2d48e7e2ed7d699871183ed706699119281canthony break; 2153805a2d48e7e2ed7d699871183ed706699119281canthony } 2154afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("cycle",option+1) == 0) 2155805a2d48e7e2ed7d699871183ed706699119281canthony { 21565d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2157ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 215892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CycleColormapImage(_image,(ssize_t) StringToLong(arg1), 215992c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 2160805a2d48e7e2ed7d699871183ed706699119281canthony break; 2161805a2d48e7e2ed7d699871183ed706699119281canthony } 2162ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2163805a2d48e7e2ed7d699871183ed706699119281canthony } 2164805a2d48e7e2ed7d699871183ed706699119281canthony case 'd': 2165805a2d48e7e2ed7d699871183ed706699119281canthony { 2166afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("decipher",option+1) == 0) 2167805a2d48e7e2ed7d699871183ed706699119281canthony { 21684837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 2169805a2d48e7e2ed7d699871183ed706699119281canthony StringInfo 2170805a2d48e7e2ed7d699871183ed706699119281canthony *passkey; 2171805a2d48e7e2ed7d699871183ed706699119281canthony 21723a5987c75c361dde2b38579f05ca961927d842fecristy passkey=FileToStringInfo(arg1,~0UL,_exception); 2173ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (passkey == (StringInfo *) NULL) 2174ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2175ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony 2176ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony (void) PasskeyDecipherImage(_image,passkey,_exception); 2177ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony passkey=DestroyStringInfo(passkey); 2178805a2d48e7e2ed7d699871183ed706699119281canthony break; 2179805a2d48e7e2ed7d699871183ed706699119281canthony } 2180afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("depth",option+1) == 0) 2181805a2d48e7e2ed7d699871183ed706699119281canthony { 218292c93bd35e207736d340f1b32000006a5bf6208eanthony /* The _image_info->depth setting has already been set 2183dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony We just need to apply it to all images in current sequence 218431f1bf7bb6ee2698a2afab42ee0329b11663636canthony 2185dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony WARNING: Depth from 8 to 16 causes 'quantum rounding to images! 2186dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony That is it really is an operation, not a setting! Arrgghhh 218731f1bf7bb6ee2698a2afab42ee0329b11663636canthony 2188fd706f930f397221c6ba26f112e96e262fb0ba2eanthony FUTURE: this should not be an operator!!! 2189dcf510d63effc0d1d252ea3a1e68aa893673ad52anthony */ 219092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageDepth(_image,_image_info->depth,_exception); 2191805a2d48e7e2ed7d699871183ed706699119281canthony break; 2192805a2d48e7e2ed7d699871183ed706699119281canthony } 2193afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("deskew",option+1) == 0) 2194805a2d48e7e2ed7d699871183ed706699119281canthony { 2195805a2d48e7e2ed7d699871183ed706699119281canthony double 2196805a2d48e7e2ed7d699871183ed706699119281canthony threshold; 2197805a2d48e7e2ed7d699871183ed706699119281canthony 2198ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony if (IfNormalOp) { 21995d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2200ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2201fd706f930f397221c6ba26f112e96e262fb0ba2eanthony threshold=StringToDoubleInterval(arg1,(double) QuantumRange+1.0); 2202ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony } 2203afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony else 2204afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony threshold=40.0*QuantumRange/100.0; 220592c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=DeskewImage(_image,threshold,_exception); 2206805a2d48e7e2ed7d699871183ed706699119281canthony break; 2207805a2d48e7e2ed7d699871183ed706699119281canthony } 2208afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("despeckle",option+1) == 0) 2209805a2d48e7e2ed7d699871183ed706699119281canthony { 221092c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=DespeckleImage(_image,_exception); 2211805a2d48e7e2ed7d699871183ed706699119281canthony break; 2212805a2d48e7e2ed7d699871183ed706699119281canthony } 2213afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("distort",option+1) == 0) 2214805a2d48e7e2ed7d699871183ed706699119281canthony { 2215805a2d48e7e2ed7d699871183ed706699119281canthony double 2216b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *args; 2217805a2d48e7e2ed7d699871183ed706699119281canthony 2218b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ssize_t 2219b1d483a6a6a5678173db9d60bec52dd5a37826beanthony count; 2220805a2d48e7e2ed7d699871183ed706699119281canthony 22212a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony parse = ParseCommandOption(MagickDistortOptions,MagickFalse,arg1); 22222a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony if ( parse < 0 ) 2223ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedDistortMethod", 2224ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg1); 2225827944d54938c1f8a74ff53cd35c11801060d995dirk if ((DistortMethod) parse == ResizeDistortion) 2226805a2d48e7e2ed7d699871183ed706699119281canthony { 222780c3775de081817d58849ae9ded5325d397fb1acanthony double 222880c3775de081817d58849ae9ded5325d397fb1acanthony resize_args[2]; 2229805a2d48e7e2ed7d699871183ed706699119281canthony /* Special Case - Argument is actually a resize geometry! 2230805a2d48e7e2ed7d699871183ed706699119281canthony ** Convert that to an appropriate distortion argument array. 2231fd706f930f397221c6ba26f112e96e262fb0ba2eanthony ** FUTURE: make a separate special resize operator 2232fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony Roll into a resize special operator */ 22335d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg2) == MagickFalse) 2234ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidGeometry", 2235ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony option,arg2); 2236ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony (void) ParseRegionGeometry(_image,arg2,&geometry,_exception); 223780c3775de081817d58849ae9ded5325d397fb1acanthony resize_args[0]=(double) geometry.width; 223880c3775de081817d58849ae9ded5325d397fb1acanthony resize_args[1]=(double) geometry.height; 2239827944d54938c1f8a74ff53cd35c11801060d995dirk new_image=DistortImage(_image,(DistortMethod) parse, 22402a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (size_t)2,resize_args,MagickTrue,_exception); 2241805a2d48e7e2ed7d699871183ed706699119281canthony break; 2242805a2d48e7e2ed7d699871183ed706699119281canthony } 2243b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* convert argument string into an array of doubles */ 2244964d28ed4391c639c60c392807c9dfb09f933ba8anthony args = StringToArrayOfDoubles(arg2,&count,_exception); 2245f432c635c526259b858c9aad3d409c5c44545686cristy if (args == (double *) NULL ) 2246b1d483a6a6a5678173db9d60bec52dd5a37826beanthony CLIWandExceptArgBreak(OptionError,"InvalidNumberList",option,arg2); 2247b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 2248827944d54938c1f8a74ff53cd35c11801060d995dirk new_image=DistortImage(_image,(DistortMethod) parse,(size_t) 224952b632a875d61ac705bca7ad2b0919f90112eef9cristy count,args,IsPlusOp,_exception); 2250b1d483a6a6a5678173db9d60bec52dd5a37826beanthony args=(double *) RelinquishMagickMemory(args); 2251805a2d48e7e2ed7d699871183ed706699119281canthony break; 2252805a2d48e7e2ed7d699871183ed706699119281canthony } 2253afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("draw",option+1) == 0) 2254805a2d48e7e2ed7d699871183ed706699119281canthony { 225592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_draw_info->primitive,arg1); 225692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) DrawImage(_image,_draw_info,_exception); 2257f432c635c526259b858c9aad3d409c5c44545686cristy (void) CloneString(&_draw_info->primitive,(char *) NULL); 2258805a2d48e7e2ed7d699871183ed706699119281canthony break; 2259805a2d48e7e2ed7d699871183ed706699119281canthony } 2260ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2261805a2d48e7e2ed7d699871183ed706699119281canthony } 2262805a2d48e7e2ed7d699871183ed706699119281canthony case 'e': 2263805a2d48e7e2ed7d699871183ed706699119281canthony { 2264afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("edge",option+1) == 0) 2265805a2d48e7e2ed7d699871183ed706699119281canthony { 2266fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 226722de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 226822de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 22699dc4c51125c7242f63ea032e209ea65fe855f82fcristy new_image=EdgeImage(_image,geometry_info.rho,_exception); 2270805a2d48e7e2ed7d699871183ed706699119281canthony break; 2271805a2d48e7e2ed7d699871183ed706699119281canthony } 2272afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("emboss",option+1) == 0) 2273805a2d48e7e2ed7d699871183ed706699119281canthony { 2274fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 2275b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony if ((flags & (RhoValue|SigmaValue)) == 0) 2276b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2277805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 2278805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 227992c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=EmbossImage(_image,geometry_info.rho, 228092c93bd35e207736d340f1b32000006a5bf6208eanthony geometry_info.sigma,_exception); 2281805a2d48e7e2ed7d699871183ed706699119281canthony break; 2282805a2d48e7e2ed7d699871183ed706699119281canthony } 2283afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("encipher",option+1) == 0) 2284805a2d48e7e2ed7d699871183ed706699119281canthony { 22854837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 2286805a2d48e7e2ed7d699871183ed706699119281canthony StringInfo 2287805a2d48e7e2ed7d699871183ed706699119281canthony *passkey; 2288805a2d48e7e2ed7d699871183ed706699119281canthony 22893a5987c75c361dde2b38579f05ca961927d842fecristy passkey=FileToStringInfo(arg1,~0UL,_exception); 2290805a2d48e7e2ed7d699871183ed706699119281canthony if (passkey != (StringInfo *) NULL) 2291805a2d48e7e2ed7d699871183ed706699119281canthony { 229292c93bd35e207736d340f1b32000006a5bf6208eanthony (void) PasskeyEncipherImage(_image,passkey,_exception); 2293805a2d48e7e2ed7d699871183ed706699119281canthony passkey=DestroyStringInfo(passkey); 2294805a2d48e7e2ed7d699871183ed706699119281canthony } 2295805a2d48e7e2ed7d699871183ed706699119281canthony break; 2296805a2d48e7e2ed7d699871183ed706699119281canthony } 2297afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("enhance",option+1) == 0) 2298805a2d48e7e2ed7d699871183ed706699119281canthony { 229992c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=EnhanceImage(_image,_exception); 2300805a2d48e7e2ed7d699871183ed706699119281canthony break; 2301805a2d48e7e2ed7d699871183ed706699119281canthony } 2302afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("equalize",option+1) == 0) 2303805a2d48e7e2ed7d699871183ed706699119281canthony { 230492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) EqualizeImage(_image,_exception); 2305805a2d48e7e2ed7d699871183ed706699119281canthony break; 2306805a2d48e7e2ed7d699871183ed706699119281canthony } 2307afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("evaluate",option+1) == 0) 2308805a2d48e7e2ed7d699871183ed706699119281canthony { 2309805a2d48e7e2ed7d699871183ed706699119281canthony double 2310805a2d48e7e2ed7d699871183ed706699119281canthony constant; 2311805a2d48e7e2ed7d699871183ed706699119281canthony 23122a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony parse = ParseCommandOption(MagickEvaluateOptions,MagickFalse,arg1); 23132a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony if ( parse < 0 ) 23142a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedEvaluateOperator", 23152a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony option,arg1); 23165d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg2) == MagickFalse) 23172a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg2); 2318fd706f930f397221c6ba26f112e96e262fb0ba2eanthony constant=StringToDoubleInterval(arg2,(double) QuantumRange+1.0); 23192a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony (void) EvaluateImage(_image,(MagickEvaluateOperator)parse,constant, 23202a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony _exception); 2321805a2d48e7e2ed7d699871183ed706699119281canthony break; 2322805a2d48e7e2ed7d699871183ed706699119281canthony } 2323afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("extent",option+1) == 0) 2324805a2d48e7e2ed7d699871183ed706699119281canthony { 23255d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 23262a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 232792c93bd35e207736d340f1b32000006a5bf6208eanthony flags=ParseGravityGeometry(_image,arg1,&geometry,_exception); 2328805a2d48e7e2ed7d699871183ed706699119281canthony if (geometry.width == 0) 232992c93bd35e207736d340f1b32000006a5bf6208eanthony geometry.width=_image->columns; 2330805a2d48e7e2ed7d699871183ed706699119281canthony if (geometry.height == 0) 233192c93bd35e207736d340f1b32000006a5bf6208eanthony geometry.height=_image->rows; 233292c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ExtentImage(_image,&geometry,_exception); 2333805a2d48e7e2ed7d699871183ed706699119281canthony break; 2334805a2d48e7e2ed7d699871183ed706699119281canthony } 2335ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2336805a2d48e7e2ed7d699871183ed706699119281canthony } 2337805a2d48e7e2ed7d699871183ed706699119281canthony case 'f': 2338805a2d48e7e2ed7d699871183ed706699119281canthony { 2339afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("flip",option+1) == 0) 2340805a2d48e7e2ed7d699871183ed706699119281canthony { 234192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=FlipImage(_image,_exception); 2342805a2d48e7e2ed7d699871183ed706699119281canthony break; 2343805a2d48e7e2ed7d699871183ed706699119281canthony } 2344afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("flop",option+1) == 0) 2345805a2d48e7e2ed7d699871183ed706699119281canthony { 234692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=FlopImage(_image,_exception); 2347805a2d48e7e2ed7d699871183ed706699119281canthony break; 2348805a2d48e7e2ed7d699871183ed706699119281canthony } 2349afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("floodfill",option+1) == 0) 2350805a2d48e7e2ed7d699871183ed706699119281canthony { 2351805a2d48e7e2ed7d699871183ed706699119281canthony PixelInfo 2352805a2d48e7e2ed7d699871183ed706699119281canthony target; 2353805a2d48e7e2ed7d699871183ed706699119281canthony 23545d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 23552a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 235692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParsePageGeometry(_image,arg1,&geometry,_exception); 235792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) QueryColorCompliance(arg2,AllCompliance,&target,_exception); 235892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) FloodfillPaintImage(_image,_draw_info,&target,geometry.x, 2359a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony geometry.y,IsPlusOp,_exception); 2360947cb4c68bebf79b15b6f3e824bc973491a77709cristy break; 2361947cb4c68bebf79b15b6f3e824bc973491a77709cristy } 2362afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("frame",option+1) == 0) 2363805a2d48e7e2ed7d699871183ed706699119281canthony { 2364805a2d48e7e2ed7d699871183ed706699119281canthony FrameInfo 2365805a2d48e7e2ed7d699871183ed706699119281canthony frame_info; 2366805a2d48e7e2ed7d699871183ed706699119281canthony 236731f1bf7bb6ee2698a2afab42ee0329b11663636canthony CompositeOperator 2368fd706f930f397221c6ba26f112e96e262fb0ba2eanthony compose; 2369fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 2370fd706f930f397221c6ba26f112e96e262fb0ba2eanthony const char* 2371fd706f930f397221c6ba26f112e96e262fb0ba2eanthony value; 2372fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 237392c93bd35e207736d340f1b32000006a5bf6208eanthony value=GetImageOption(_image_info,"compose"); 237492c93bd35e207736d340f1b32000006a5bf6208eanthony compose=OverCompositeOp; /* use Over not _image->compose */ 23754b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy if (value != (const char *) NULL) 23764b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions, 23774b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy MagickFalse,value); 23785d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 23792a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 238092c93bd35e207736d340f1b32000006a5bf6208eanthony flags=ParsePageGeometry(_image,arg1,&geometry,_exception); 2381805a2d48e7e2ed7d699871183ed706699119281canthony frame_info.width=geometry.width; 2382805a2d48e7e2ed7d699871183ed706699119281canthony frame_info.height=geometry.height; 2383805a2d48e7e2ed7d699871183ed706699119281canthony frame_info.outer_bevel=geometry.x; 2384805a2d48e7e2ed7d699871183ed706699119281canthony frame_info.inner_bevel=geometry.y; 2385805a2d48e7e2ed7d699871183ed706699119281canthony frame_info.x=(ssize_t) frame_info.width; 2386805a2d48e7e2ed7d699871183ed706699119281canthony frame_info.y=(ssize_t) frame_info.height; 238792c93bd35e207736d340f1b32000006a5bf6208eanthony frame_info.width=_image->columns+2*frame_info.width; 238892c93bd35e207736d340f1b32000006a5bf6208eanthony frame_info.height=_image->rows+2*frame_info.height; 238992c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=FrameImage(_image,&frame_info,compose,_exception); 2390805a2d48e7e2ed7d699871183ed706699119281canthony break; 2391805a2d48e7e2ed7d699871183ed706699119281canthony } 2392afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("function",option+1) == 0) 2393805a2d48e7e2ed7d699871183ed706699119281canthony { 2394805a2d48e7e2ed7d699871183ed706699119281canthony double 2395b1d483a6a6a5678173db9d60bec52dd5a37826beanthony *args; 2396805a2d48e7e2ed7d699871183ed706699119281canthony 2397b1d483a6a6a5678173db9d60bec52dd5a37826beanthony ssize_t 2398b1d483a6a6a5678173db9d60bec52dd5a37826beanthony count; 2399805a2d48e7e2ed7d699871183ed706699119281canthony 24002a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony parse=ParseCommandOption(MagickFunctionOptions,MagickFalse,arg1); 24012a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony if ( parse < 0 ) 24022a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedFunction", 24032a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony option,arg1); 2404b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* convert argument string into an array of doubles */ 2405964d28ed4391c639c60c392807c9dfb09f933ba8anthony args = StringToArrayOfDoubles(arg2,&count,_exception); 2406f432c635c526259b858c9aad3d409c5c44545686cristy if (args == (double *) NULL ) 2407b1d483a6a6a5678173db9d60bec52dd5a37826beanthony CLIWandExceptArgBreak(OptionError,"InvalidNumberList",option,arg2); 2408b1d483a6a6a5678173db9d60bec52dd5a37826beanthony 240952b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) FunctionImage(_image,(MagickFunction)parse,(size_t) count,args, 2410b1d483a6a6a5678173db9d60bec52dd5a37826beanthony _exception); 2411b1d483a6a6a5678173db9d60bec52dd5a37826beanthony args=(double *) RelinquishMagickMemory(args); 2412805a2d48e7e2ed7d699871183ed706699119281canthony break; 2413805a2d48e7e2ed7d699871183ed706699119281canthony } 2414ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2415805a2d48e7e2ed7d699871183ed706699119281canthony } 2416805a2d48e7e2ed7d699871183ed706699119281canthony case 'g': 2417805a2d48e7e2ed7d699871183ed706699119281canthony { 2418afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("gamma",option+1) == 0) 2419805a2d48e7e2ed7d699871183ed706699119281canthony { 24207a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony double 24217a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony constant; 24227a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony 24235d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2424fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 24257a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony constant=StringToDouble(arg1,(char **) NULL); 24267a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#if 0 24277a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony /* Using Gamma, via a cache */ 24287a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony if (IfPlusOp) 24293e3ec3afbb0782697f201cbe30a56794c10dc7efcristy constant=PerceptibleReciprocal(constant); 24307a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony (void) GammaImage(_image,constant,_exception); 24317a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#else 24327a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony /* Using Evaluate POW, direct update of values - more accurite */ 2433afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfNormalOp) 24343e3ec3afbb0782697f201cbe30a56794c10dc7efcristy constant=PerceptibleReciprocal(constant); 24357a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony (void) EvaluateImage(_image,PowEvaluateOperator,constant,_exception); 2436a494388aa6c22bbecf620418c78f9e6d90d353d4cristy _image->gamma*=StringToDouble(arg1,(char **) NULL); 24377a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony#endif 24387a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony /* Set gamma setting -- Old meaning of "+gamma" 24397a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony * _image->gamma=StringToDouble(arg1,(char **) NULL); 24407a4d610ce2d062b39a7aa86c65bfcbf0a9cb29d5anthony */ 2441805a2d48e7e2ed7d699871183ed706699119281canthony break; 2442805a2d48e7e2ed7d699871183ed706699119281canthony } 2443975a8d7aba7678845112e4d2c5a155011f35a3abanthony if (LocaleCompare("gaussian-blur",option+1) == 0) 2444805a2d48e7e2ed7d699871183ed706699119281canthony { 2445fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 2446b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony if ((flags & (RhoValue|SigmaValue)) == 0) 2447b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2448805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 2449805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 245092c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=GaussianBlurImage(_image,geometry_info.rho, 245192c93bd35e207736d340f1b32000006a5bf6208eanthony geometry_info.sigma,_exception); 2452805a2d48e7e2ed7d699871183ed706699119281canthony break; 2453805a2d48e7e2ed7d699871183ed706699119281canthony } 2454975a8d7aba7678845112e4d2c5a155011f35a3abanthony if (LocaleCompare("gaussian",option+1) == 0) 2455975a8d7aba7678845112e4d2c5a155011f35a3abanthony { 2456464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-gaussian-blur"); 245752b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand,"-gaussian-blur",arg1,NULL,exception); 2458975a8d7aba7678845112e4d2c5a155011f35a3abanthony } 2459afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("geometry",option+1) == 0) 2460805a2d48e7e2ed7d699871183ed706699119281canthony { 2461fd706f930f397221c6ba26f112e96e262fb0ba2eanthony /* 246231f1bf7bb6ee2698a2afab42ee0329b11663636canthony Record Image offset for composition. (A Setting) 2463fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony Resize last _image. (ListOperator) -- DEPRECIATE 246431f1bf7bb6ee2698a2afab42ee0329b11663636canthony FUTURE: Why if no 'offset' does this resize ALL images? 246531f1bf7bb6ee2698a2afab42ee0329b11663636canthony Also why is the setting recorded in the IMAGE non-sense! 2466fd706f930f397221c6ba26f112e96e262fb0ba2eanthony */ 2467afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfPlusOp) 2468fd706f930f397221c6ba26f112e96e262fb0ba2eanthony { /* remove the previous composition geometry offset! */ 246992c93bd35e207736d340f1b32000006a5bf6208eanthony if (_image->geometry != (char *) NULL) 247092c93bd35e207736d340f1b32000006a5bf6208eanthony _image->geometry=DestroyString(_image->geometry); 2471805a2d48e7e2ed7d699871183ed706699119281canthony break; 2472805a2d48e7e2ed7d699871183ed706699119281canthony } 24735d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2474fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 247592c93bd35e207736d340f1b32000006a5bf6208eanthony flags=ParseRegionGeometry(_image,arg1,&geometry,_exception); 2476805a2d48e7e2ed7d699871183ed706699119281canthony if (((flags & XValue) != 0) || ((flags & YValue) != 0)) 247792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) CloneString(&_image->geometry,arg1); 2478805a2d48e7e2ed7d699871183ed706699119281canthony else 247992c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ResizeImage(_image,geometry.width,geometry.height, 2480aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy _image->filter,_exception); 2481805a2d48e7e2ed7d699871183ed706699119281canthony break; 2482805a2d48e7e2ed7d699871183ed706699119281canthony } 2483ab9435990dd6a881f2055aee7562d3de4dabc01dcristy if (LocaleCompare("grayscale",option+1) == 0) 2484e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy { 2485ab9435990dd6a881f2055aee7562d3de4dabc01dcristy parse=ParseCommandOption(MagickPixelIntensityOptions, 2486e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy MagickFalse,arg1); 2487ab9435990dd6a881f2055aee7562d3de4dabc01dcristy if (parse < 0) 2488ab9435990dd6a881f2055aee7562d3de4dabc01dcristy CLIWandExceptArgBreak(OptionError,"UnrecognizedIntensityMethod", 2489ab9435990dd6a881f2055aee7562d3de4dabc01dcristy option,arg1); 2490ab9435990dd6a881f2055aee7562d3de4dabc01dcristy (void) GrayscaleImage(_image,(PixelIntensityMethod) parse,_exception); 2491e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy break; 2492e0b9b8f4be5f9c30ee9638b35dc5db8181e4f13ecristy } 2493ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2494805a2d48e7e2ed7d699871183ed706699119281canthony } 24952fc10e5aedab9144531a4668dc7526e3caf514e1cristy case 'h': 24962fc10e5aedab9144531a4668dc7526e3caf514e1cristy { 24972fc10e5aedab9144531a4668dc7526e3caf514e1cristy if (LocaleCompare("hough-lines",option+1) == 0) 24982fc10e5aedab9144531a4668dc7526e3caf514e1cristy { 24992fc10e5aedab9144531a4668dc7526e3caf514e1cristy flags=ParseGeometry(arg1,&geometry_info); 25002fc10e5aedab9144531a4668dc7526e3caf514e1cristy if ((flags & (RhoValue|SigmaValue)) == 0) 25012fc10e5aedab9144531a4668dc7526e3caf514e1cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 25022fc10e5aedab9144531a4668dc7526e3caf514e1cristy if ((flags & SigmaValue) == 0) 2503d5b8d2a469c520ee65fac429fca4451cd2aa77fbcristy geometry_info.sigma=geometry_info.rho; 25042fc10e5aedab9144531a4668dc7526e3caf514e1cristy if ((flags & XiValue) == 0) 250520f90428960e75e335cd31e9a92ed31ff610117dcristy geometry_info.xi=40; 250620f90428960e75e335cd31e9a92ed31ff610117dcristy new_image=HoughLineImage(_image,(size_t) geometry_info.rho, 250720f90428960e75e335cd31e9a92ed31ff610117dcristy (size_t) geometry_info.sigma,(size_t) geometry_info.xi,_exception); 25082fc10e5aedab9144531a4668dc7526e3caf514e1cristy break; 25092fc10e5aedab9144531a4668dc7526e3caf514e1cristy } 25102fc10e5aedab9144531a4668dc7526e3caf514e1cristy CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 25112fc10e5aedab9144531a4668dc7526e3caf514e1cristy } 2512805a2d48e7e2ed7d699871183ed706699119281canthony case 'i': 2513805a2d48e7e2ed7d699871183ed706699119281canthony { 2514afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("identify",option+1) == 0) 2515805a2d48e7e2ed7d699871183ed706699119281canthony { 251631f1bf7bb6ee2698a2afab42ee0329b11663636canthony const char 251731f1bf7bb6ee2698a2afab42ee0329b11663636canthony *format, 2518805a2d48e7e2ed7d699871183ed706699119281canthony *text; 2519805a2d48e7e2ed7d699871183ed706699119281canthony 252092c93bd35e207736d340f1b32000006a5bf6208eanthony format=GetImageOption(_image_info,"format"); 2521f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy if (format == (char *) NULL) 2522f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy { 2523f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy (void) IdentifyImage(_image,stdout,_image_info->verbose, 2524f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy _exception); 2525f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy break; 2526f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy } 252792c93bd35e207736d340f1b32000006a5bf6208eanthony text=InterpretImageProperties(_image_info,_image,format,_exception); 2528805a2d48e7e2ed7d699871183ed706699119281canthony if (text == (char *) NULL) 2529964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandExceptionBreak(OptionWarning,"InterpretPropertyFailure", 2530f9b9b66fe208238128ba3ac30739956cf0f9fa8ccristy option); 2531805a2d48e7e2ed7d699871183ed706699119281canthony (void) fputs(text,stdout); 253231f1bf7bb6ee2698a2afab42ee0329b11663636canthony text=DestroyString((char *)text); 2533805a2d48e7e2ed7d699871183ed706699119281canthony break; 2534805a2d48e7e2ed7d699871183ed706699119281canthony } 2535afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("implode",option+1) == 0) 2536805a2d48e7e2ed7d699871183ed706699119281canthony { 2537b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony flags=ParseGeometry(arg1,&geometry_info); 2538b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony if ((flags & RhoValue) == 0) 2539fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2540b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony new_image=ImplodeImage(_image,geometry_info.rho,_image->interpolate, 2541b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony _exception); 2542805a2d48e7e2ed7d699871183ed706699119281canthony break; 2543805a2d48e7e2ed7d699871183ed706699119281canthony } 2544afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("interpolative-resize",option+1) == 0) 2545947cb4c68bebf79b15b6f3e824bc973491a77709cristy { 2546fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony /* FUTURE: New to IMv7 2547fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony Roll into a resize special operator */ 25485d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2549fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 255092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseRegionGeometry(_image,arg1,&geometry,_exception); 255192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=InterpolativeResizeImage(_image,geometry.width, 255292c93bd35e207736d340f1b32000006a5bf6208eanthony geometry.height,_image->interpolate,_exception); 2553947cb4c68bebf79b15b6f3e824bc973491a77709cristy break; 2554947cb4c68bebf79b15b6f3e824bc973491a77709cristy } 2555ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2556805a2d48e7e2ed7d699871183ed706699119281canthony } 25573b207f84e063df4bcd421a6cf49a2d74c5190705cristy case 'k': 25583b207f84e063df4bcd421a6cf49a2d74c5190705cristy { 25593b207f84e063df4bcd421a6cf49a2d74c5190705cristy if (LocaleCompare("kuwahara",option+1) == 0) 25603b207f84e063df4bcd421a6cf49a2d74c5190705cristy { 25613b207f84e063df4bcd421a6cf49a2d74c5190705cristy /* 25623b207f84e063df4bcd421a6cf49a2d74c5190705cristy Edge preserving blur. 25633b207f84e063df4bcd421a6cf49a2d74c5190705cristy */ 25643b207f84e063df4bcd421a6cf49a2d74c5190705cristy flags=ParseGeometry(arg1,&geometry_info); 25653b207f84e063df4bcd421a6cf49a2d74c5190705cristy if ((flags & (RhoValue|SigmaValue)) == 0) 25663b207f84e063df4bcd421a6cf49a2d74c5190705cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 25673b207f84e063df4bcd421a6cf49a2d74c5190705cristy if ((flags & SigmaValue) == 0) 256825ea936e4addac40d298332d87bf22654f026fb6cristy geometry_info.sigma=geometry_info.rho-0.5; 25693b207f84e063df4bcd421a6cf49a2d74c5190705cristy new_image=KuwaharaImage(_image,geometry_info.rho,geometry_info.sigma, 25703b207f84e063df4bcd421a6cf49a2d74c5190705cristy _exception); 25713b207f84e063df4bcd421a6cf49a2d74c5190705cristy break; 25723b207f84e063df4bcd421a6cf49a2d74c5190705cristy } 25733b207f84e063df4bcd421a6cf49a2d74c5190705cristy CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 25743b207f84e063df4bcd421a6cf49a2d74c5190705cristy } 2575805a2d48e7e2ed7d699871183ed706699119281canthony case 'l': 2576805a2d48e7e2ed7d699871183ed706699119281canthony { 2577afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("lat",option+1) == 0) 2578805a2d48e7e2ed7d699871183ed706699119281canthony { 2579fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 258022de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 258122de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2582b5c691ec2b4b726cde507498a7c288ae4d894246cristy if ((flags & SigmaValue) == 0) 2583b5c691ec2b4b726cde507498a7c288ae4d894246cristy geometry_info.sigma=1.0; 2584805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PercentValue) != 0) 2585805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0; 258692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=AdaptiveThresholdImage(_image,(size_t) geometry_info.rho, 258731f1bf7bb6ee2698a2afab42ee0329b11663636canthony (size_t) geometry_info.sigma,(double) geometry_info.xi, 258892c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 2589805a2d48e7e2ed7d699871183ed706699119281canthony break; 2590805a2d48e7e2ed7d699871183ed706699119281canthony } 2591afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("level",option+1) == 0) 2592805a2d48e7e2ed7d699871183ed706699119281canthony { 2593a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy double 2594805a2d48e7e2ed7d699871183ed706699119281canthony black_point, 2595805a2d48e7e2ed7d699871183ed706699119281canthony gamma, 2596805a2d48e7e2ed7d699871183ed706699119281canthony white_point; 2597805a2d48e7e2ed7d699871183ed706699119281canthony 2598805a2d48e7e2ed7d699871183ed706699119281canthony MagickStatusType 2599805a2d48e7e2ed7d699871183ed706699119281canthony flags; 2600805a2d48e7e2ed7d699871183ed706699119281canthony 2601fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 260222de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 260322de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2604805a2d48e7e2ed7d699871183ed706699119281canthony black_point=geometry_info.rho; 2605a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy white_point=(double) QuantumRange; 2606805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) != 0) 2607805a2d48e7e2ed7d699871183ed706699119281canthony white_point=geometry_info.sigma; 2608805a2d48e7e2ed7d699871183ed706699119281canthony gamma=1.0; 2609805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XiValue) != 0) 2610805a2d48e7e2ed7d699871183ed706699119281canthony gamma=geometry_info.xi; 2611805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PercentValue) != 0) 2612805a2d48e7e2ed7d699871183ed706699119281canthony { 2613a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy black_point*=(double) (QuantumRange/100.0); 2614a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy white_point*=(double) (QuantumRange/100.0); 2615805a2d48e7e2ed7d699871183ed706699119281canthony } 2616805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 2617a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy white_point=(double) QuantumRange-black_point; 2618afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfPlusOp || ((flags & AspectValue) != 0)) 261992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) LevelizeImage(_image,black_point,white_point,gamma,_exception); 2620805a2d48e7e2ed7d699871183ed706699119281canthony else 262192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) LevelImage(_image,black_point,white_point,gamma,_exception); 2622805a2d48e7e2ed7d699871183ed706699119281canthony break; 2623805a2d48e7e2ed7d699871183ed706699119281canthony } 2624afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("level-colors",option+1) == 0) 2625805a2d48e7e2ed7d699871183ed706699119281canthony { 2626805a2d48e7e2ed7d699871183ed706699119281canthony char 2627151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy token[MagickPathExtent]; 2628805a2d48e7e2ed7d699871183ed706699119281canthony 2629805a2d48e7e2ed7d699871183ed706699119281canthony const char 2630805a2d48e7e2ed7d699871183ed706699119281canthony *p; 2631805a2d48e7e2ed7d699871183ed706699119281canthony 2632805a2d48e7e2ed7d699871183ed706699119281canthony PixelInfo 2633805a2d48e7e2ed7d699871183ed706699119281canthony black_point, 2634805a2d48e7e2ed7d699871183ed706699119281canthony white_point; 2635805a2d48e7e2ed7d699871183ed706699119281canthony 2636fd706f930f397221c6ba26f112e96e262fb0ba2eanthony p=(const char *) arg1; 26378bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); /* get black point color */ 2638805a2d48e7e2ed7d699871183ed706699119281canthony if ((isalpha((int) *token) != 0) || ((*token == '#') != 0)) 2639269c9413034627692b2a7d0a352f9dee4e8eada8cristy (void) QueryColorCompliance(token,AllCompliance, 264092c93bd35e207736d340f1b32000006a5bf6208eanthony &black_point,_exception); 2641805a2d48e7e2ed7d699871183ed706699119281canthony else 2642269c9413034627692b2a7d0a352f9dee4e8eada8cristy (void) QueryColorCompliance("#000000",AllCompliance, 264392c93bd35e207736d340f1b32000006a5bf6208eanthony &black_point,_exception); 2644805a2d48e7e2ed7d699871183ed706699119281canthony if (isalpha((int) token[0]) || (token[0] == '#')) 26458bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); 2646805a2d48e7e2ed7d699871183ed706699119281canthony if (*token == '\0') 2647805a2d48e7e2ed7d699871183ed706699119281canthony white_point=black_point; /* set everything to that color */ 2648805a2d48e7e2ed7d699871183ed706699119281canthony else 2649805a2d48e7e2ed7d699871183ed706699119281canthony { 2650805a2d48e7e2ed7d699871183ed706699119281canthony if ((isalpha((int) *token) == 0) && ((*token == '#') == 0)) 26518bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); /* Get white point color. */ 2652805a2d48e7e2ed7d699871183ed706699119281canthony if ((isalpha((int) *token) != 0) || ((*token == '#') != 0)) 2653269c9413034627692b2a7d0a352f9dee4e8eada8cristy (void) QueryColorCompliance(token,AllCompliance, 265492c93bd35e207736d340f1b32000006a5bf6208eanthony &white_point,_exception); 2655805a2d48e7e2ed7d699871183ed706699119281canthony else 2656269c9413034627692b2a7d0a352f9dee4e8eada8cristy (void) QueryColorCompliance("#ffffff",AllCompliance, 265792c93bd35e207736d340f1b32000006a5bf6208eanthony &white_point,_exception); 2658805a2d48e7e2ed7d699871183ed706699119281canthony } 265992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) LevelImageColors(_image,&black_point,&white_point, 2660a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony IsPlusOp,_exception); 2661805a2d48e7e2ed7d699871183ed706699119281canthony break; 2662805a2d48e7e2ed7d699871183ed706699119281canthony } 2663afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("linear-stretch",option+1) == 0) 2664805a2d48e7e2ed7d699871183ed706699119281canthony { 2665805a2d48e7e2ed7d699871183ed706699119281canthony double 2666805a2d48e7e2ed7d699871183ed706699119281canthony black_point, 2667805a2d48e7e2ed7d699871183ed706699119281canthony white_point; 2668805a2d48e7e2ed7d699871183ed706699119281canthony 2669805a2d48e7e2ed7d699871183ed706699119281canthony MagickStatusType 2670805a2d48e7e2ed7d699871183ed706699119281canthony flags; 2671805a2d48e7e2ed7d699871183ed706699119281canthony 2672fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 267322de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 267422de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2675805a2d48e7e2ed7d699871183ed706699119281canthony black_point=geometry_info.rho; 2676a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy white_point=(double) _image->columns*_image->rows; 2677805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) != 0) 2678805a2d48e7e2ed7d699871183ed706699119281canthony white_point=geometry_info.sigma; 2679805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PercentValue) != 0) 2680805a2d48e7e2ed7d699871183ed706699119281canthony { 268192c93bd35e207736d340f1b32000006a5bf6208eanthony black_point*=(double) _image->columns*_image->rows/100.0; 268292c93bd35e207736d340f1b32000006a5bf6208eanthony white_point*=(double) _image->columns*_image->rows/100.0; 2683805a2d48e7e2ed7d699871183ed706699119281canthony } 2684805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 2685a19f1d70e9a9f88279c4ecafe6dfafc1f9a09599cristy white_point=(double) _image->columns*_image->rows- 2686805a2d48e7e2ed7d699871183ed706699119281canthony black_point; 268792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) LinearStretchImage(_image,black_point,white_point,_exception); 2688805a2d48e7e2ed7d699871183ed706699119281canthony break; 2689805a2d48e7e2ed7d699871183ed706699119281canthony } 2690afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("liquid-rescale",option+1) == 0) 2691805a2d48e7e2ed7d699871183ed706699119281canthony { 2692fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony /* FUTURE: Roll into a resize special operator */ 26935d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 2694fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 269592c93bd35e207736d340f1b32000006a5bf6208eanthony flags=ParseRegionGeometry(_image,arg1,&geometry,_exception); 2696805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XValue) == 0) 2697805a2d48e7e2ed7d699871183ed706699119281canthony geometry.x=1; 2698805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & YValue) == 0) 2699805a2d48e7e2ed7d699871183ed706699119281canthony geometry.y=0; 270092c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=LiquidRescaleImage(_image,geometry.width, 270192c93bd35e207736d340f1b32000006a5bf6208eanthony geometry.height,1.0*geometry.x,1.0*geometry.y,_exception); 2702805a2d48e7e2ed7d699871183ed706699119281canthony break; 2703805a2d48e7e2ed7d699871183ed706699119281canthony } 27043505d87b01f101f16d8b7b6fad595339cf94f290dirk if (LocaleCompare("local-contrast",option+1) == 0) 27053505d87b01f101f16d8b7b6fad595339cf94f290dirk { 27063505d87b01f101f16d8b7b6fad595339cf94f290dirk MagickStatusType 27073505d87b01f101f16d8b7b6fad595339cf94f290dirk flags; 27083505d87b01f101f16d8b7b6fad595339cf94f290dirk 27093505d87b01f101f16d8b7b6fad595339cf94f290dirk flags=ParseGeometry(arg1,&geometry_info); 27103505d87b01f101f16d8b7b6fad595339cf94f290dirk if ((flags & RhoValue) == 0) 2711394f211e475ce19fdfbebb0760280013fdd1bd80dirk geometry_info.rho=10; 27123505d87b01f101f16d8b7b6fad595339cf94f290dirk if ((flags & SigmaValue) == 0) 2713394f211e475ce19fdfbebb0760280013fdd1bd80dirk geometry_info.sigma=12.5; 27143505d87b01f101f16d8b7b6fad595339cf94f290dirk new_image=LocalContrastImage(_image,geometry_info.rho, 27153505d87b01f101f16d8b7b6fad595339cf94f290dirk geometry_info.sigma,exception); 27163505d87b01f101f16d8b7b6fad595339cf94f290dirk break; 27173505d87b01f101f16d8b7b6fad595339cf94f290dirk } 2718ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2719805a2d48e7e2ed7d699871183ed706699119281canthony } 2720805a2d48e7e2ed7d699871183ed706699119281canthony case 'm': 2721805a2d48e7e2ed7d699871183ed706699119281canthony { 27227220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy if (LocaleCompare("magnify",option+1) == 0) 27237220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy { 27247220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy new_image=MagnifyImage(_image,_exception); 27257220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy break; 27267220ee4e3f325d35e1a0f4cd00f497e2812fe5f1cristy } 2727afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("map",option+1) == 0) 2728805a2d48e7e2ed7d699871183ed706699119281canthony { 2729464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-remap"); 273052b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand,"-remap",NULL,NULL,exception); 2731805a2d48e7e2ed7d699871183ed706699119281canthony break; 2732805a2d48e7e2ed7d699871183ed706699119281canthony } 2733afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("mask",option+1) == 0) 2734805a2d48e7e2ed7d699871183ed706699119281canthony { 2735327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy CLIWandWarnReplaced("-read-mask"); 2736327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy (void) CLISimpleOperatorImage(cli_wand,"-read-mask",NULL,NULL, 2737327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy exception); 2738805a2d48e7e2ed7d699871183ed706699119281canthony break; 2739805a2d48e7e2ed7d699871183ed706699119281canthony } 274052ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy if (LocaleCompare("matte",option+1) == 0) 274152ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy { 274252ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy CLIWandWarnReplaced(IfNormalOp?"-alpha Set":"-alpha Off"); 274352ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy (void) SetImageAlphaChannel(_image,IfNormalOp ? SetAlphaChannel : 27441309fc31647973212b7aa8bf54554363e175a952cristy DeactivateAlphaChannel, _exception); 274552ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy break; 274652ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy } 27472fc10e5aedab9144531a4668dc7526e3caf514e1cristy if (LocaleCompare("mean-shift",option+1) == 0) 27482fc10e5aedab9144531a4668dc7526e3caf514e1cristy { 27492fc10e5aedab9144531a4668dc7526e3caf514e1cristy flags=ParseGeometry(arg1,&geometry_info); 27502fc10e5aedab9144531a4668dc7526e3caf514e1cristy if ((flags & (RhoValue|SigmaValue)) == 0) 27512fc10e5aedab9144531a4668dc7526e3caf514e1cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 27522fc10e5aedab9144531a4668dc7526e3caf514e1cristy if ((flags & SigmaValue) == 0) 27532fc10e5aedab9144531a4668dc7526e3caf514e1cristy geometry_info.sigma=1.0; 27542fc10e5aedab9144531a4668dc7526e3caf514e1cristy if ((flags & XiValue) == 0) 27551309fc31647973212b7aa8bf54554363e175a952cristy geometry_info.xi=0.10*QuantumRange; 27561309fc31647973212b7aa8bf54554363e175a952cristy if ((flags & PercentValue) != 0) 27571309fc31647973212b7aa8bf54554363e175a952cristy geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0; 27581309fc31647973212b7aa8bf54554363e175a952cristy new_image=MeanShiftImage(_image,(size_t) geometry_info.rho, 27591309fc31647973212b7aa8bf54554363e175a952cristy (size_t) geometry_info.sigma,geometry_info.xi,_exception); 27602fc10e5aedab9144531a4668dc7526e3caf514e1cristy break; 27612fc10e5aedab9144531a4668dc7526e3caf514e1cristy } 276252ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy if (LocaleCompare("median",option+1) == 0) 276352ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy { 276452ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy CLIWandWarnReplaced("-statistic Median"); 276552b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand,"-statistic","Median",arg1,exception); 276652ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy break; 276752ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy } 276852ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy if (LocaleCompare("mode",option+1) == 0) 276952ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy { 277052ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy /* FUTURE: note this is also a special "montage" option */ 277152ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy CLIWandWarnReplaced("-statistic Mode"); 277252b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand,"-statistic","Mode",arg1,exception); 277352ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy break; 277452ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy } 2775afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("modulate",option+1) == 0) 2776805a2d48e7e2ed7d699871183ed706699119281canthony { 27775d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 27787bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 277992c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ModulateImage(_image,arg1,_exception); 2780805a2d48e7e2ed7d699871183ed706699119281canthony break; 2781805a2d48e7e2ed7d699871183ed706699119281canthony } 2782afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("monitor",option+1) == 0) 2783805a2d48e7e2ed7d699871183ed706699119281canthony { 278492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageProgressMonitor(_image, IfNormalOp ? MonitorProgress : 2785afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony (MagickProgressMonitor) NULL,(void *) NULL); 2786805a2d48e7e2ed7d699871183ed706699119281canthony break; 2787805a2d48e7e2ed7d699871183ed706699119281canthony } 2788afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("monochrome",option+1) == 0) 2789805a2d48e7e2ed7d699871183ed706699119281canthony { 279092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageType(_image,BilevelType,_exception); 2791805a2d48e7e2ed7d699871183ed706699119281canthony break; 2792805a2d48e7e2ed7d699871183ed706699119281canthony } 2793afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("morphology",option+1) == 0) 2794805a2d48e7e2ed7d699871183ed706699119281canthony { 2795805a2d48e7e2ed7d699871183ed706699119281canthony char 2796151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy token[MagickPathExtent]; 2797805a2d48e7e2ed7d699871183ed706699119281canthony 2798805a2d48e7e2ed7d699871183ed706699119281canthony const char 2799805a2d48e7e2ed7d699871183ed706699119281canthony *p; 2800805a2d48e7e2ed7d699871183ed706699119281canthony 2801805a2d48e7e2ed7d699871183ed706699119281canthony KernelInfo 2802805a2d48e7e2ed7d699871183ed706699119281canthony *kernel; 2803805a2d48e7e2ed7d699871183ed706699119281canthony 2804805a2d48e7e2ed7d699871183ed706699119281canthony ssize_t 2805805a2d48e7e2ed7d699871183ed706699119281canthony iterations; 2806805a2d48e7e2ed7d699871183ed706699119281canthony 2807fd706f930f397221c6ba26f112e96e262fb0ba2eanthony p=arg1; 28088bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); 28097bc87995f5fcb67d01e8cad3e80b0024b42e942danthony parse=ParseCommandOption(MagickMorphologyOptions,MagickFalse,token); 28107bc87995f5fcb67d01e8cad3e80b0024b42e942danthony if ( parse < 0 ) 28112c57b74e160f9b605d74dec24081309f28b83899cristy CLIWandExceptArgBreak(OptionError,"UnrecognizedFunction",option, 28122c57b74e160f9b605d74dec24081309f28b83899cristy arg1); 2813805a2d48e7e2ed7d699871183ed706699119281canthony iterations=1L; 28148bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); 2815805a2d48e7e2ed7d699871183ed706699119281canthony if ((*p == ':') || (*p == ',')) 28168bedb4edca01599dfd0612cb0daa35b09c67d736Cristy GetNextToken(p,&p,MagickPathExtent,token); 2817805a2d48e7e2ed7d699871183ed706699119281canthony if ((*p != '\0')) 2818805a2d48e7e2ed7d699871183ed706699119281canthony iterations=(ssize_t) StringToLong(p); 28192c57b74e160f9b605d74dec24081309f28b83899cristy kernel=AcquireKernelInfo(arg2,exception); 2820805a2d48e7e2ed7d699871183ed706699119281canthony if (kernel == (KernelInfo *) NULL) 28212c57b74e160f9b605d74dec24081309f28b83899cristy CLIWandExceptArgBreak(OptionError,"UnabletoParseKernel",option,arg2); 28222c57b74e160f9b605d74dec24081309f28b83899cristy new_image=MorphologyImage(_image,(MorphologyMethod)parse,iterations, 28232c57b74e160f9b605d74dec24081309f28b83899cristy kernel,_exception); 2824805a2d48e7e2ed7d699871183ed706699119281canthony kernel=DestroyKernelInfo(kernel); 2825805a2d48e7e2ed7d699871183ed706699119281canthony break; 2826805a2d48e7e2ed7d699871183ed706699119281canthony } 2827afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("motion-blur",option+1) == 0) 2828805a2d48e7e2ed7d699871183ed706699119281canthony { 2829fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 283022de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 283122de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2832805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 2833805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 28342c57b74e160f9b605d74dec24081309f28b83899cristy new_image=MotionBlurImage(_image,geometry_info.rho,geometry_info.sigma, 28352c57b74e160f9b605d74dec24081309f28b83899cristy geometry_info.xi,_exception); 2836805a2d48e7e2ed7d699871183ed706699119281canthony break; 2837805a2d48e7e2ed7d699871183ed706699119281canthony } 2838ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2839805a2d48e7e2ed7d699871183ed706699119281canthony } 2840805a2d48e7e2ed7d699871183ed706699119281canthony case 'n': 2841805a2d48e7e2ed7d699871183ed706699119281canthony { 2842afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("negate",option+1) == 0) 2843805a2d48e7e2ed7d699871183ed706699119281canthony { 2844a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) NegateImage(_image, IsPlusOp, _exception); 2845805a2d48e7e2ed7d699871183ed706699119281canthony break; 2846805a2d48e7e2ed7d699871183ed706699119281canthony } 2847afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("noise",option+1) == 0) 2848805a2d48e7e2ed7d699871183ed706699119281canthony { 2849975a8d7aba7678845112e4d2c5a155011f35a3abanthony double 2850975a8d7aba7678845112e4d2c5a155011f35a3abanthony attenuate; 285131f1bf7bb6ee2698a2afab42ee0329b11663636canthony 2852975a8d7aba7678845112e4d2c5a155011f35a3abanthony const char* 2853975a8d7aba7678845112e4d2c5a155011f35a3abanthony value; 285431f1bf7bb6ee2698a2afab42ee0329b11663636canthony 2855975a8d7aba7678845112e4d2c5a155011f35a3abanthony if (IfNormalOp) 2856975a8d7aba7678845112e4d2c5a155011f35a3abanthony { 2857464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-statistic NonPeak"); 285852b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand,"-statistic","NonPeak",arg1,exception); 2859975a8d7aba7678845112e4d2c5a155011f35a3abanthony break; 2860805a2d48e7e2ed7d699871183ed706699119281canthony } 2861975a8d7aba7678845112e4d2c5a155011f35a3abanthony parse=ParseCommandOption(MagickNoiseOptions,MagickFalse,arg1); 2862975a8d7aba7678845112e4d2c5a155011f35a3abanthony if ( parse < 0 ) 2863975a8d7aba7678845112e4d2c5a155011f35a3abanthony CLIWandExceptArgBreak(OptionError,"UnrecognizedNoiseType", 2864975a8d7aba7678845112e4d2c5a155011f35a3abanthony option,arg1); 2865975a8d7aba7678845112e4d2c5a155011f35a3abanthony attenuate=1.0; 2866975a8d7aba7678845112e4d2c5a155011f35a3abanthony value=GetImageOption(_image_info,"attenuate"); 2867975a8d7aba7678845112e4d2c5a155011f35a3abanthony if (value != (const char *) NULL) 2868975a8d7aba7678845112e4d2c5a155011f35a3abanthony attenuate=StringToDouble(value,(char **) NULL); 2869975a8d7aba7678845112e4d2c5a155011f35a3abanthony new_image=AddNoiseImage(_image,(NoiseType)parse,attenuate, 2870975a8d7aba7678845112e4d2c5a155011f35a3abanthony _exception); 2871805a2d48e7e2ed7d699871183ed706699119281canthony break; 2872805a2d48e7e2ed7d699871183ed706699119281canthony } 2873afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("normalize",option+1) == 0) 2874805a2d48e7e2ed7d699871183ed706699119281canthony { 287592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) NormalizeImage(_image,_exception); 2876805a2d48e7e2ed7d699871183ed706699119281canthony break; 2877805a2d48e7e2ed7d699871183ed706699119281canthony } 2878ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2879805a2d48e7e2ed7d699871183ed706699119281canthony } 2880805a2d48e7e2ed7d699871183ed706699119281canthony case 'o': 2881805a2d48e7e2ed7d699871183ed706699119281canthony { 2882afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("opaque",option+1) == 0) 2883805a2d48e7e2ed7d699871183ed706699119281canthony { 2884805a2d48e7e2ed7d699871183ed706699119281canthony PixelInfo 2885805a2d48e7e2ed7d699871183ed706699119281canthony target; 2886805a2d48e7e2ed7d699871183ed706699119281canthony 288792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) QueryColorCompliance(arg1,AllCompliance,&target,_exception); 2888a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) OpaquePaintImage(_image,&target,&_draw_info->fill,IsPlusOp, 288992c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 2890805a2d48e7e2ed7d699871183ed706699119281canthony break; 2891805a2d48e7e2ed7d699871183ed706699119281canthony } 2892afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("ordered-dither",option+1) == 0) 2893805a2d48e7e2ed7d699871183ed706699119281canthony { 2894cd69a2d4e422d02a1ca70c45f59861752717871edirk (void) OrderedDitherImage(_image,arg1,_exception); 2895805a2d48e7e2ed7d699871183ed706699119281canthony break; 2896805a2d48e7e2ed7d699871183ed706699119281canthony } 2897ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 2898805a2d48e7e2ed7d699871183ed706699119281canthony } 2899805a2d48e7e2ed7d699871183ed706699119281canthony case 'p': 2900805a2d48e7e2ed7d699871183ed706699119281canthony { 2901afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("paint",option+1) == 0) 2902805a2d48e7e2ed7d699871183ed706699119281canthony { 290322de2722b682eb405b60ec6022a7546df994674eanthony flags=ParseGeometry(arg1,&geometry_info); 290422de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 290522de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 290692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=OilPaintImage(_image,geometry_info.rho,geometry_info.sigma, 290792c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 2908805a2d48e7e2ed7d699871183ed706699119281canthony break; 2909805a2d48e7e2ed7d699871183ed706699119281canthony } 29107884a9380b6826befb2773117db32d3877b40ac6cristy if (LocaleCompare("perceptible",option+1) == 0) 29117884a9380b6826befb2773117db32d3877b40ac6cristy { 29127884a9380b6826befb2773117db32d3877b40ac6cristy (void) PerceptibleImage(_image,StringToDouble(arg1,(char **) NULL), 29137884a9380b6826befb2773117db32d3877b40ac6cristy _exception); 29147884a9380b6826befb2773117db32d3877b40ac6cristy break; 29157884a9380b6826befb2773117db32d3877b40ac6cristy } 2916afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("polaroid",option+1) == 0) 2917805a2d48e7e2ed7d699871183ed706699119281canthony { 2918e9e3d389ed5873131a570d26375abeb93e688740cristy const char 2919e9e3d389ed5873131a570d26375abeb93e688740cristy *caption; 2920e9e3d389ed5873131a570d26375abeb93e688740cristy 2921805a2d48e7e2ed7d699871183ed706699119281canthony double 2922805a2d48e7e2ed7d699871183ed706699119281canthony angle; 2923805a2d48e7e2ed7d699871183ed706699119281canthony 29247bc87995f5fcb67d01e8cad3e80b0024b42e942danthony if (IfPlusOp) { 2925f42014dc55e8d21355ea3d17372e2d9c14b07641anthony RandomInfo 29262c57b74e160f9b605d74dec24081309f28b83899cristy *random_info; 2927805a2d48e7e2ed7d699871183ed706699119281canthony 2928f42014dc55e8d21355ea3d17372e2d9c14b07641anthony random_info=AcquireRandomInfo(); 2929f42014dc55e8d21355ea3d17372e2d9c14b07641anthony angle=22.5*(GetPseudoRandomValue(random_info)-0.5); 2930f42014dc55e8d21355ea3d17372e2d9c14b07641anthony random_info=DestroyRandomInfo(random_info); 2931f42014dc55e8d21355ea3d17372e2d9c14b07641anthony } 29327bc87995f5fcb67d01e8cad3e80b0024b42e942danthony else { 2933f42014dc55e8d21355ea3d17372e2d9c14b07641anthony flags=ParseGeometry(arg1,&geometry_info); 293422de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 293522de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 2936f42014dc55e8d21355ea3d17372e2d9c14b07641anthony angle=geometry_info.rho; 2937f42014dc55e8d21355ea3d17372e2d9c14b07641anthony } 293892c93bd35e207736d340f1b32000006a5bf6208eanthony caption=GetImageProperty(_image,"caption",_exception); 293992c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=PolaroidImage(_image,_draw_info,caption,angle, 294092c93bd35e207736d340f1b32000006a5bf6208eanthony _image->interpolate,_exception); 2941805a2d48e7e2ed7d699871183ed706699119281canthony break; 29428cdfb34521517f1062d21941afcb28ca7b61b97ccristy } 2943afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("posterize",option+1) == 0) 2944805a2d48e7e2ed7d699871183ed706699119281canthony { 294522de2722b682eb405b60ec6022a7546df994674eanthony flags=ParseGeometry(arg1,&geometry_info); 294622de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 29477bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 294892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) PosterizeImage(_image,(size_t) geometry_info.rho, 2949cbda611068350bf4459f2dda1951f8823702e129cristy _quantize_info->dither_method,_exception); 2950805a2d48e7e2ed7d699871183ed706699119281canthony break; 2951805a2d48e7e2ed7d699871183ed706699119281canthony } 2952afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("preview",option+1) == 0) 2953805a2d48e7e2ed7d699871183ed706699119281canthony { 295431f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* FUTURE: should be a 'Genesis' option? 295531f1bf7bb6ee2698a2afab42ee0329b11663636canthony Option however is also in WandSettingOptionInfo() 29567bc87995f5fcb67d01e8cad3e80b0024b42e942danthony Why??? 2957947cb4c68bebf79b15b6f3e824bc973491a77709cristy */ 29587bc87995f5fcb67d01e8cad3e80b0024b42e942danthony parse=ParseCommandOption(MagickPreviewOptions, MagickFalse,arg1); 29597bc87995f5fcb67d01e8cad3e80b0024b42e942danthony if ( parse < 0 ) 29607bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"UnrecognizedPreviewType", 29617bc87995f5fcb67d01e8cad3e80b0024b42e942danthony option,arg1); 29627bc87995f5fcb67d01e8cad3e80b0024b42e942danthony new_image=PreviewImage(_image,(PreviewType)parse,_exception); 2963805a2d48e7e2ed7d699871183ed706699119281canthony break; 2964805a2d48e7e2ed7d699871183ed706699119281canthony } 2965afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("profile",option+1) == 0) 2966805a2d48e7e2ed7d699871183ed706699119281canthony { 29674837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 2968805a2d48e7e2ed7d699871183ed706699119281canthony const char 2969805a2d48e7e2ed7d699871183ed706699119281canthony *name; 2970805a2d48e7e2ed7d699871183ed706699119281canthony 2971805a2d48e7e2ed7d699871183ed706699119281canthony const StringInfo 2972805a2d48e7e2ed7d699871183ed706699119281canthony *profile; 2973805a2d48e7e2ed7d699871183ed706699119281canthony 2974805a2d48e7e2ed7d699871183ed706699119281canthony Image 2975805a2d48e7e2ed7d699871183ed706699119281canthony *profile_image; 2976805a2d48e7e2ed7d699871183ed706699119281canthony 2977805a2d48e7e2ed7d699871183ed706699119281canthony ImageInfo 2978805a2d48e7e2ed7d699871183ed706699119281canthony *profile_info; 2979805a2d48e7e2ed7d699871183ed706699119281canthony 2980afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfPlusOp) 298192c93bd35e207736d340f1b32000006a5bf6208eanthony { /* Remove a profile from the _image. */ 298292c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ProfileImage(_image,arg1,(const unsigned char *) 298392c93bd35e207736d340f1b32000006a5bf6208eanthony NULL,0,_exception); 2984805a2d48e7e2ed7d699871183ed706699119281canthony break; 2985805a2d48e7e2ed7d699871183ed706699119281canthony } 298692c93bd35e207736d340f1b32000006a5bf6208eanthony /* Associate a profile with the _image. */ 298792c93bd35e207736d340f1b32000006a5bf6208eanthony profile_info=CloneImageInfo(_image_info); 298892c93bd35e207736d340f1b32000006a5bf6208eanthony profile=GetImageProfile(_image,"iptc"); 2989805a2d48e7e2ed7d699871183ed706699119281canthony if (profile != (StringInfo *) NULL) 2990805a2d48e7e2ed7d699871183ed706699119281canthony profile_info->profile=(void *) CloneStringInfo(profile); 299192c93bd35e207736d340f1b32000006a5bf6208eanthony profile_image=GetImageCache(profile_info,arg1,_exception); 2992805a2d48e7e2ed7d699871183ed706699119281canthony profile_info=DestroyImageInfo(profile_info); 2993805a2d48e7e2ed7d699871183ed706699119281canthony if (profile_image == (Image *) NULL) 2994805a2d48e7e2ed7d699871183ed706699119281canthony { 2995805a2d48e7e2ed7d699871183ed706699119281canthony StringInfo 2996805a2d48e7e2ed7d699871183ed706699119281canthony *profile; 2997805a2d48e7e2ed7d699871183ed706699119281canthony 299892c93bd35e207736d340f1b32000006a5bf6208eanthony profile_info=CloneImageInfo(_image_info); 2999fd706f930f397221c6ba26f112e96e262fb0ba2eanthony (void) CopyMagickString(profile_info->filename,arg1, 3000151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy MagickPathExtent); 300192c93bd35e207736d340f1b32000006a5bf6208eanthony profile=FileToStringInfo(profile_info->filename,~0UL,_exception); 3002805a2d48e7e2ed7d699871183ed706699119281canthony if (profile != (StringInfo *) NULL) 3003805a2d48e7e2ed7d699871183ed706699119281canthony { 300492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ProfileImage(_image,profile_info->magick, 3005805a2d48e7e2ed7d699871183ed706699119281canthony GetStringInfoDatum(profile),(size_t) 300692c93bd35e207736d340f1b32000006a5bf6208eanthony GetStringInfoLength(profile),_exception); 3007805a2d48e7e2ed7d699871183ed706699119281canthony profile=DestroyStringInfo(profile); 3008805a2d48e7e2ed7d699871183ed706699119281canthony } 3009805a2d48e7e2ed7d699871183ed706699119281canthony profile_info=DestroyImageInfo(profile_info); 3010805a2d48e7e2ed7d699871183ed706699119281canthony break; 3011805a2d48e7e2ed7d699871183ed706699119281canthony } 3012805a2d48e7e2ed7d699871183ed706699119281canthony ResetImageProfileIterator(profile_image); 3013805a2d48e7e2ed7d699871183ed706699119281canthony name=GetNextImageProfile(profile_image); 3014805a2d48e7e2ed7d699871183ed706699119281canthony while (name != (const char *) NULL) 3015805a2d48e7e2ed7d699871183ed706699119281canthony { 3016805a2d48e7e2ed7d699871183ed706699119281canthony profile=GetImageProfile(profile_image,name); 3017805a2d48e7e2ed7d699871183ed706699119281canthony if (profile != (StringInfo *) NULL) 301892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ProfileImage(_image,name,GetStringInfoDatum(profile), 301992c93bd35e207736d340f1b32000006a5bf6208eanthony (size_t) GetStringInfoLength(profile),_exception); 3020805a2d48e7e2ed7d699871183ed706699119281canthony name=GetNextImageProfile(profile_image); 3021805a2d48e7e2ed7d699871183ed706699119281canthony } 3022805a2d48e7e2ed7d699871183ed706699119281canthony profile_image=DestroyImage(profile_image); 3023805a2d48e7e2ed7d699871183ed706699119281canthony break; 3024805a2d48e7e2ed7d699871183ed706699119281canthony } 3025ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3026805a2d48e7e2ed7d699871183ed706699119281canthony } 3027805a2d48e7e2ed7d699871183ed706699119281canthony case 'r': 3028805a2d48e7e2ed7d699871183ed706699119281canthony { 30296d612cf866ac2d4bae9e21f95b035f8bf50c6f28dirk if (LocaleCompare("rotational-blur",option+1) == 0) 3030805a2d48e7e2ed7d699871183ed706699119281canthony { 3031fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 303222de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 303322de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 30346d612cf866ac2d4bae9e21f95b035f8bf50c6f28dirk new_image=RotationalBlurImage(_image,geometry_info.rho,_exception); 3035805a2d48e7e2ed7d699871183ed706699119281canthony break; 3036805a2d48e7e2ed7d699871183ed706699119281canthony } 3037afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("raise",option+1) == 0) 3038805a2d48e7e2ed7d699871183ed706699119281canthony { 30395d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3040f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 304192c93bd35e207736d340f1b32000006a5bf6208eanthony flags=ParsePageGeometry(_image,arg1,&geometry,_exception); 3042a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) RaiseImage(_image,&geometry,IsNormalOp,_exception); 3043805a2d48e7e2ed7d699871183ed706699119281canthony break; 3044805a2d48e7e2ed7d699871183ed706699119281canthony } 3045afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("random-threshold",option+1) == 0) 3046805a2d48e7e2ed7d699871183ed706699119281canthony { 30478352b50e85321562d27f6a90aa7d461afa0c1df0dirk double 30488352b50e85321562d27f6a90aa7d461afa0c1df0dirk min_threshold, 30498352b50e85321562d27f6a90aa7d461afa0c1df0dirk max_threshold; 30508352b50e85321562d27f6a90aa7d461afa0c1df0dirk 30515d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3052f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 30538352b50e85321562d27f6a90aa7d461afa0c1df0dirk min_threshold=0.0; 30548352b50e85321562d27f6a90aa7d461afa0c1df0dirk max_threshold=(double) QuantumRange; 30558352b50e85321562d27f6a90aa7d461afa0c1df0dirk flags=ParseGeometry(arg1,&geometry_info); 30568352b50e85321562d27f6a90aa7d461afa0c1df0dirk min_threshold=geometry_info.rho; 30578352b50e85321562d27f6a90aa7d461afa0c1df0dirk max_threshold=geometry_info.sigma; 30588352b50e85321562d27f6a90aa7d461afa0c1df0dirk if ((flags & SigmaValue) == 0) 30598352b50e85321562d27f6a90aa7d461afa0c1df0dirk max_threshold=min_threshold; 30608352b50e85321562d27f6a90aa7d461afa0c1df0dirk if (strchr(arg1,'%') != (char *) NULL) 30618352b50e85321562d27f6a90aa7d461afa0c1df0dirk { 30628352b50e85321562d27f6a90aa7d461afa0c1df0dirk max_threshold*=(double) (0.01*QuantumRange); 30638352b50e85321562d27f6a90aa7d461afa0c1df0dirk min_threshold*=(double) (0.01*QuantumRange); 30648352b50e85321562d27f6a90aa7d461afa0c1df0dirk } 30658352b50e85321562d27f6a90aa7d461afa0c1df0dirk (void) RandomThresholdImage(_image,min_threshold,max_threshold, 30668352b50e85321562d27f6a90aa7d461afa0c1df0dirk _exception); 3067805a2d48e7e2ed7d699871183ed706699119281canthony break; 3068805a2d48e7e2ed7d699871183ed706699119281canthony } 3069327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy if (LocaleCompare("read-mask",option+1) == 0) 3070327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy { 3071327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy /* Note: arguments do not have percent escapes expanded */ 3072327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy Image 3073327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy *mask; 3074327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy 3075327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy if (IfPlusOp) 3076327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy { /* Remove a mask. */ 3077327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy (void) SetImageMask(_image,ReadPixelMask,(Image *) NULL, 3078327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy _exception); 3079327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy break; 3080327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy } 3081327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy /* Set the image mask. */ 3082327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy mask=GetImageCache(_image_info,arg1,_exception); 3083327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy if (mask == (Image *) NULL) 3084327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy break; 3085327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy (void) SetImageMask(_image,ReadPixelMask,mask,_exception); 3086327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy mask=DestroyImage(mask); 3087327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy break; 3088327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy } 3089975a8d7aba7678845112e4d2c5a155011f35a3abanthony if (LocaleCompare("recolor",option+1) == 0) 3090975a8d7aba7678845112e4d2c5a155011f35a3abanthony { 3091464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-color-matrix"); 309252b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand,"-color-matrix",arg1,NULL,exception); 3093975a8d7aba7678845112e4d2c5a155011f35a3abanthony } 3094afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("remap",option+1) == 0) 3095805a2d48e7e2ed7d699871183ed706699119281canthony { 30964837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 3097805a2d48e7e2ed7d699871183ed706699119281canthony Image 3098805a2d48e7e2ed7d699871183ed706699119281canthony *remap_image; 3099805a2d48e7e2ed7d699871183ed706699119281canthony 310092c93bd35e207736d340f1b32000006a5bf6208eanthony remap_image=GetImageCache(_image_info,arg1,_exception); 3101805a2d48e7e2ed7d699871183ed706699119281canthony if (remap_image == (Image *) NULL) 3102805a2d48e7e2ed7d699871183ed706699119281canthony break; 310392c93bd35e207736d340f1b32000006a5bf6208eanthony (void) RemapImage(_quantize_info,_image,remap_image,_exception); 3104805a2d48e7e2ed7d699871183ed706699119281canthony remap_image=DestroyImage(remap_image); 3105805a2d48e7e2ed7d699871183ed706699119281canthony break; 3106805a2d48e7e2ed7d699871183ed706699119281canthony } 3107afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("repage",option+1) == 0) 3108805a2d48e7e2ed7d699871183ed706699119281canthony { 3109afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfNormalOp) 31100d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy { 31115d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 31120d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option, 31130d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy arg1); 31140d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy (void) ResetImagePage(_image,arg1); 31150d0de74f1eb7f2e4a52a75c10aa52b358e428634cristy } 311631f1bf7bb6ee2698a2afab42ee0329b11663636canthony else 311792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseAbsoluteGeometry("0x0+0+0",&_image->page); 3118805a2d48e7e2ed7d699871183ed706699119281canthony break; 3119805a2d48e7e2ed7d699871183ed706699119281canthony } 3120afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("resample",option+1) == 0) 3121805a2d48e7e2ed7d699871183ed706699119281canthony { 3122f46d42620631d2581e0b6a56456e203e17c427c8anthony /* FUTURE: Roll into a resize special operation */ 3123fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 312422de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 312522de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3126805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3127805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=geometry_info.rho; 312892c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ResampleImage(_image,geometry_info.rho, 3129aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy geometry_info.sigma,_image->filter,_exception); 3130805a2d48e7e2ed7d699871183ed706699119281canthony break; 3131805a2d48e7e2ed7d699871183ed706699119281canthony } 3132afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("resize",option+1) == 0) 3133805a2d48e7e2ed7d699871183ed706699119281canthony { 31345d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3135f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 313692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseRegionGeometry(_image,arg1,&geometry,_exception); 313792c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ResizeImage(_image,geometry.width,geometry.height, 3138aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy _image->filter,_exception); 3139805a2d48e7e2ed7d699871183ed706699119281canthony break; 3140805a2d48e7e2ed7d699871183ed706699119281canthony } 3141afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("roll",option+1) == 0) 3142805a2d48e7e2ed7d699871183ed706699119281canthony { 31435d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3144f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 314592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParsePageGeometry(_image,arg1,&geometry,_exception); 314692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=RollImage(_image,geometry.x,geometry.y,_exception); 3147805a2d48e7e2ed7d699871183ed706699119281canthony break; 3148805a2d48e7e2ed7d699871183ed706699119281canthony } 3149afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("rotate",option+1) == 0) 3150805a2d48e7e2ed7d699871183ed706699119281canthony { 315122de2722b682eb405b60ec6022a7546df994674eanthony flags=ParseGeometry(arg1,&geometry_info); 315222de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 3153f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3154ad255a09dd7c6b6a3422c24082f755013ade2ce6anthony if ((flags & GreaterValue) != 0 && (_image->columns <= _image->rows)) 315522de2722b682eb405b60ec6022a7546df994674eanthony break; 315622de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & LessValue) != 0 && (_image->columns >= _image->rows)) 315722de2722b682eb405b60ec6022a7546df994674eanthony break; 315892c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=RotateImage(_image,geometry_info.rho,_exception); 3159805a2d48e7e2ed7d699871183ed706699119281canthony break; 3160805a2d48e7e2ed7d699871183ed706699119281canthony } 3161ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3162805a2d48e7e2ed7d699871183ed706699119281canthony } 3163805a2d48e7e2ed7d699871183ed706699119281canthony case 's': 3164805a2d48e7e2ed7d699871183ed706699119281canthony { 3165afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sample",option+1) == 0) 3166805a2d48e7e2ed7d699871183ed706699119281canthony { 3167fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony /* FUTURE: Roll into a resize special operator */ 31685d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3169f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 317092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseRegionGeometry(_image,arg1,&geometry,_exception); 317192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=SampleImage(_image,geometry.width,geometry.height, 317292c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 3173805a2d48e7e2ed7d699871183ed706699119281canthony break; 3174805a2d48e7e2ed7d699871183ed706699119281canthony } 3175afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("scale",option+1) == 0) 3176805a2d48e7e2ed7d699871183ed706699119281canthony { 3177fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony /* FUTURE: Roll into a resize special operator */ 31785d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3179f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 318092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseRegionGeometry(_image,arg1,&geometry,_exception); 318192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ScaleImage(_image,geometry.width,geometry.height, 318292c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 3183805a2d48e7e2ed7d699871183ed706699119281canthony break; 3184805a2d48e7e2ed7d699871183ed706699119281canthony } 3185f42014dc55e8d21355ea3d17372e2d9c14b07641anthony if (LocaleCompare("segment",option+1) == 0) 3186f42014dc55e8d21355ea3d17372e2d9c14b07641anthony { 3187f42014dc55e8d21355ea3d17372e2d9c14b07641anthony flags=ParseGeometry(arg1,&geometry_info); 318822de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 318922de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3190f42014dc55e8d21355ea3d17372e2d9c14b07641anthony if ((flags & SigmaValue) == 0) 3191f42014dc55e8d21355ea3d17372e2d9c14b07641anthony geometry_info.sigma=1.0; 3192f42014dc55e8d21355ea3d17372e2d9c14b07641anthony (void) SegmentImage(_image,_image->colorspace, 3193f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _image_info->verbose,geometry_info.rho,geometry_info.sigma, 3194f42014dc55e8d21355ea3d17372e2d9c14b07641anthony _exception); 3195f42014dc55e8d21355ea3d17372e2d9c14b07641anthony break; 3196f42014dc55e8d21355ea3d17372e2d9c14b07641anthony } 3197afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("selective-blur",option+1) == 0) 3198805a2d48e7e2ed7d699871183ed706699119281canthony { 3199fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 320022de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 320122de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 320222de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & SigmaValue) == 0) 320322de2722b682eb405b60ec6022a7546df994674eanthony geometry_info.sigma=1.0; 3204805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PercentValue) != 0) 3205805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi=(double) QuantumRange*geometry_info.xi/100.0; 320692c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=SelectiveBlurImage(_image,geometry_info.rho, 3207aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy geometry_info.sigma,geometry_info.xi,_exception); 3208805a2d48e7e2ed7d699871183ed706699119281canthony break; 3209805a2d48e7e2ed7d699871183ed706699119281canthony } 3210afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("separate",option+1) == 0) 3211805a2d48e7e2ed7d699871183ed706699119281canthony { 321231f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* WARNING: This can generate multiple images! */ 321343f425dd7d5b33887726982b28ebfa06f5560636anthony /* FUTURE - this may be replaced by a "-channel" method */ 3214dfdb19ea2c08296b31fef860352c0a6efe8e9cc6cristy new_image=SeparateImages(_image,_exception); 3215805a2d48e7e2ed7d699871183ed706699119281canthony break; 3216805a2d48e7e2ed7d699871183ed706699119281canthony } 3217afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sepia-tone",option+1) == 0) 3218805a2d48e7e2ed7d699871183ed706699119281canthony { 32195d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3220f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3221f42014dc55e8d21355ea3d17372e2d9c14b07641anthony new_image=SepiaToneImage(_image,StringToDoubleInterval(arg1, 3222f42014dc55e8d21355ea3d17372e2d9c14b07641anthony (double) QuantumRange+1.0),_exception); 3223805a2d48e7e2ed7d699871183ed706699119281canthony break; 3224805a2d48e7e2ed7d699871183ed706699119281canthony } 3225afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("shade",option+1) == 0) 3226805a2d48e7e2ed7d699871183ed706699119281canthony { 3227fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 322822de2722b682eb405b60ec6022a7546df994674eanthony if (((flags & RhoValue) == 0) || ((flags & SigmaValue) == 0)) 322922de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3230a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony new_image=ShadeImage(_image,IsNormalOp,geometry_info.rho, 323192c93bd35e207736d340f1b32000006a5bf6208eanthony geometry_info.sigma,_exception); 3232805a2d48e7e2ed7d699871183ed706699119281canthony break; 3233805a2d48e7e2ed7d699871183ed706699119281canthony } 3234afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("shadow",option+1) == 0) 3235805a2d48e7e2ed7d699871183ed706699119281canthony { 3236fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 323722de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 323822de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3239805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3240805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 3241805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XiValue) == 0) 3242805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi=4.0; 3243805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PsiValue) == 0) 3244805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.psi=4.0; 3245aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy new_image=ShadowImage(_image,geometry_info.rho,geometry_info.sigma, 3246aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t) 3247aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy ceil(geometry_info.psi-0.5),_exception); 3248805a2d48e7e2ed7d699871183ed706699119281canthony break; 3249805a2d48e7e2ed7d699871183ed706699119281canthony } 3250afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sharpen",option+1) == 0) 3251805a2d48e7e2ed7d699871183ed706699119281canthony { 3252fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 325322de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 325422de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3255805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3256805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 3257805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XiValue) == 0) 3258805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi=0.0; 3259aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy new_image=SharpenImage(_image,geometry_info.rho,geometry_info.sigma, 3260aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy _exception); 3261805a2d48e7e2ed7d699871183ed706699119281canthony break; 3262805a2d48e7e2ed7d699871183ed706699119281canthony } 3263afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("shave",option+1) == 0) 3264805a2d48e7e2ed7d699871183ed706699119281canthony { 32655d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3266f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 326792c93bd35e207736d340f1b32000006a5bf6208eanthony flags=ParsePageGeometry(_image,arg1,&geometry,_exception); 326892c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ShaveImage(_image,&geometry,_exception); 3269805a2d48e7e2ed7d699871183ed706699119281canthony break; 3270805a2d48e7e2ed7d699871183ed706699119281canthony } 3271afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("shear",option+1) == 0) 3272805a2d48e7e2ed7d699871183ed706699119281canthony { 3273fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 327422de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 327522de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3276805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3277805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=geometry_info.rho; 32784b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy new_image=ShearImage(_image,geometry_info.rho,geometry_info.sigma, 32794b8926134c1e07e0d0ef4562af3c9fc130e432d1cristy _exception); 3280805a2d48e7e2ed7d699871183ed706699119281canthony break; 3281805a2d48e7e2ed7d699871183ed706699119281canthony } 3282afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sigmoidal-contrast",option+1) == 0) 3283805a2d48e7e2ed7d699871183ed706699119281canthony { 3284fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 328522de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 328622de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3287805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3288805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=(double) QuantumRange/2.0; 3289805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PercentValue) != 0) 3290805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=(double) QuantumRange*geometry_info.sigma/ 3291805a2d48e7e2ed7d699871183ed706699119281canthony 100.0; 3292a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SigmoidalContrastImage(_image,IsNormalOp,geometry_info.rho, 3293b1d483a6a6a5678173db9d60bec52dd5a37826beanthony geometry_info.sigma,_exception); 3294805a2d48e7e2ed7d699871183ed706699119281canthony break; 3295805a2d48e7e2ed7d699871183ed706699119281canthony } 3296afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sketch",option+1) == 0) 3297805a2d48e7e2ed7d699871183ed706699119281canthony { 3298fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 329922de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 330022de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3301805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3302805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 330392c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=SketchImage(_image,geometry_info.rho, 3304aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy geometry_info.sigma,geometry_info.xi,_exception); 3305805a2d48e7e2ed7d699871183ed706699119281canthony break; 3306805a2d48e7e2ed7d699871183ed706699119281canthony } 3307afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("solarize",option+1) == 0) 3308805a2d48e7e2ed7d699871183ed706699119281canthony { 33095d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3310f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 331192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SolarizeImage(_image,StringToDoubleInterval(arg1,(double) 331292c93bd35e207736d340f1b32000006a5bf6208eanthony QuantumRange+1.0),_exception); 3313805a2d48e7e2ed7d699871183ed706699119281canthony break; 3314805a2d48e7e2ed7d699871183ed706699119281canthony } 3315afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("sparse-color",option+1) == 0) 3316805a2d48e7e2ed7d699871183ed706699119281canthony { 3317f42014dc55e8d21355ea3d17372e2d9c14b07641anthony parse= ParseCommandOption(MagickSparseColorOptions,MagickFalse,arg1); 3318f42014dc55e8d21355ea3d17372e2d9c14b07641anthony if ( parse < 0 ) 3319f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedSparseColorMethod", 3320f42014dc55e8d21355ea3d17372e2d9c14b07641anthony option,arg1); 3321964d28ed4391c639c60c392807c9dfb09f933ba8anthony new_image=SparseColorOption(_image,(SparseColorMethod)parse,arg2, 3322964d28ed4391c639c60c392807c9dfb09f933ba8anthony _exception); 3323805a2d48e7e2ed7d699871183ed706699119281canthony break; 3324805a2d48e7e2ed7d699871183ed706699119281canthony } 3325afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("splice",option+1) == 0) 3326805a2d48e7e2ed7d699871183ed706699119281canthony { 33275d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 3328f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3329b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony flags=ParseGravityGeometry(_image,arg1,&geometry,_exception); 333092c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=SpliceImage(_image,&geometry,_exception); 3331805a2d48e7e2ed7d699871183ed706699119281canthony break; 3332805a2d48e7e2ed7d699871183ed706699119281canthony } 3333afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("spread",option+1) == 0) 3334805a2d48e7e2ed7d699871183ed706699119281canthony { 3335b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony flags=ParseGeometry(arg1,&geometry_info); 3336b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony if ((flags & RhoValue) == 0) 3337b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg2); 3338e3319c152ba05d1d0c198b61289f4926cfa3e904Cristy new_image=SpreadImage(_image,_image->interpolate,geometry_info.rho, 3339e3319c152ba05d1d0c198b61289f4926cfa3e904Cristy _exception); 3340805a2d48e7e2ed7d699871183ed706699119281canthony break; 3341805a2d48e7e2ed7d699871183ed706699119281canthony } 3342afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("statistic",option+1) == 0) 3343805a2d48e7e2ed7d699871183ed706699119281canthony { 33447bc87995f5fcb67d01e8cad3e80b0024b42e942danthony parse=ParseCommandOption(MagickStatisticOptions,MagickFalse,arg1); 33457bc87995f5fcb67d01e8cad3e80b0024b42e942danthony if ( parse < 0 ) 3346f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedStatisticType", 33477bc87995f5fcb67d01e8cad3e80b0024b42e942danthony option,arg1); 3348975a8d7aba7678845112e4d2c5a155011f35a3abanthony flags=ParseGeometry(arg2,&geometry_info); 334922de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & RhoValue) == 0) 335022de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg2); 3351975a8d7aba7678845112e4d2c5a155011f35a3abanthony if ((flags & SigmaValue) == 0) 3352975a8d7aba7678845112e4d2c5a155011f35a3abanthony geometry_info.sigma=geometry_info.rho; 33537bc87995f5fcb67d01e8cad3e80b0024b42e942danthony new_image=StatisticImage(_image,(StatisticType)parse, 33547bc87995f5fcb67d01e8cad3e80b0024b42e942danthony (size_t) geometry_info.rho,(size_t) geometry_info.sigma, 33557bc87995f5fcb67d01e8cad3e80b0024b42e942danthony _exception); 3356805a2d48e7e2ed7d699871183ed706699119281canthony break; 3357805a2d48e7e2ed7d699871183ed706699119281canthony } 3358afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("strip",option+1) == 0) 3359805a2d48e7e2ed7d699871183ed706699119281canthony { 336092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) StripImage(_image,_exception); 3361805a2d48e7e2ed7d699871183ed706699119281canthony break; 3362805a2d48e7e2ed7d699871183ed706699119281canthony } 3363afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("swirl",option+1) == 0) 3364805a2d48e7e2ed7d699871183ed706699119281canthony { 3365898c604656e1879fb0fed956d6f1969d785b4985cristy flags=ParseGeometry(arg1,&geometry_info); 3366b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony if ((flags & RhoValue) == 0) 3367898c604656e1879fb0fed956d6f1969d785b4985cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 336892c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=SwirlImage(_image,geometry_info.rho, 336992c93bd35e207736d340f1b32000006a5bf6208eanthony _image->interpolate,_exception); 3370805a2d48e7e2ed7d699871183ed706699119281canthony break; 3371805a2d48e7e2ed7d699871183ed706699119281canthony } 3372ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3373805a2d48e7e2ed7d699871183ed706699119281canthony } 3374805a2d48e7e2ed7d699871183ed706699119281canthony case 't': 3375805a2d48e7e2ed7d699871183ed706699119281canthony { 3376afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("threshold",option+1) == 0) 3377805a2d48e7e2ed7d699871183ed706699119281canthony { 3378805a2d48e7e2ed7d699871183ed706699119281canthony double 3379805a2d48e7e2ed7d699871183ed706699119281canthony threshold; 3380805a2d48e7e2ed7d699871183ed706699119281canthony 338152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony threshold=(double) QuantumRange/2; 3382a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (IfNormalOp) { 33835d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 338452bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3385fd706f930f397221c6ba26f112e96e262fb0ba2eanthony threshold=StringToDoubleInterval(arg1,(double) QuantumRange+1.0); 338652bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony } 338792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) BilevelImage(_image,threshold,_exception); 3388805a2d48e7e2ed7d699871183ed706699119281canthony break; 3389805a2d48e7e2ed7d699871183ed706699119281canthony } 3390afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("thumbnail",option+1) == 0) 3391805a2d48e7e2ed7d699871183ed706699119281canthony { 33925d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 339352bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 339492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseRegionGeometry(_image,arg1,&geometry,_exception); 339592c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=ThumbnailImage(_image,geometry.width,geometry.height, 339692c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 3397805a2d48e7e2ed7d699871183ed706699119281canthony break; 3398805a2d48e7e2ed7d699871183ed706699119281canthony } 3399afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("tint",option+1) == 0) 3400805a2d48e7e2ed7d699871183ed706699119281canthony { 34015d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 340252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 340392c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=TintImage(_image,arg1,&_draw_info->fill,_exception); 3404805a2d48e7e2ed7d699871183ed706699119281canthony break; 3405805a2d48e7e2ed7d699871183ed706699119281canthony } 3406afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("transform",option+1) == 0) 3407805a2d48e7e2ed7d699871183ed706699119281canthony { 3408464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("+distort AffineProjection"); 340952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony new_image=AffineTransformImage(_image,&_draw_info->affine,_exception); 3410805a2d48e7e2ed7d699871183ed706699119281canthony break; 3411805a2d48e7e2ed7d699871183ed706699119281canthony } 3412afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("transparent",option+1) == 0) 3413805a2d48e7e2ed7d699871183ed706699119281canthony { 3414805a2d48e7e2ed7d699871183ed706699119281canthony PixelInfo 3415805a2d48e7e2ed7d699871183ed706699119281canthony target; 3416805a2d48e7e2ed7d699871183ed706699119281canthony 341792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) QueryColorCompliance(arg1,AllCompliance,&target,_exception); 341892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) TransparentPaintImage(_image,&target,(Quantum) 3419a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony TransparentAlpha,IsPlusOp,_exception); 3420805a2d48e7e2ed7d699871183ed706699119281canthony break; 3421805a2d48e7e2ed7d699871183ed706699119281canthony } 3422afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("transpose",option+1) == 0) 3423805a2d48e7e2ed7d699871183ed706699119281canthony { 342492c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=TransposeImage(_image,_exception); 3425805a2d48e7e2ed7d699871183ed706699119281canthony break; 3426805a2d48e7e2ed7d699871183ed706699119281canthony } 3427afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("transverse",option+1) == 0) 3428805a2d48e7e2ed7d699871183ed706699119281canthony { 342992c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=TransverseImage(_image,_exception); 3430805a2d48e7e2ed7d699871183ed706699119281canthony break; 3431805a2d48e7e2ed7d699871183ed706699119281canthony } 3432afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("trim",option+1) == 0) 3433805a2d48e7e2ed7d699871183ed706699119281canthony { 343492c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=TrimImage(_image,_exception); 3435805a2d48e7e2ed7d699871183ed706699119281canthony break; 3436805a2d48e7e2ed7d699871183ed706699119281canthony } 3437afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("type",option+1) == 0) 3438805a2d48e7e2ed7d699871183ed706699119281canthony { 3439ab3a50c7dc582b00dfb64bc51b67da87cf51deafanthony /* Note that "type" setting should have already been defined */ 344092c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageType(_image,_image_info->type,_exception); 3441805a2d48e7e2ed7d699871183ed706699119281canthony break; 3442805a2d48e7e2ed7d699871183ed706699119281canthony } 3443ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3444805a2d48e7e2ed7d699871183ed706699119281canthony } 3445805a2d48e7e2ed7d699871183ed706699119281canthony case 'u': 3446805a2d48e7e2ed7d699871183ed706699119281canthony { 3447afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("unique",option+1) == 0) 3448805a2d48e7e2ed7d699871183ed706699119281canthony { 344952bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony /* FUTURE: move to SyncImageSettings() and AcqireImage()??? 345052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony Option is not documented, bt appears to be for "identify". 345152bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony We may need a identify specific verbose! 345252bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony */ 3453a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (IsPlusOp) { 345492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) DeleteImageArtifact(_image,"identify:unique-colors"); 3455805a2d48e7e2ed7d699871183ed706699119281canthony break; 3456805a2d48e7e2ed7d699871183ed706699119281canthony } 345792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageArtifact(_image,"identify:unique-colors","true"); 345892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageArtifact(_image,"verbose","true"); 3459805a2d48e7e2ed7d699871183ed706699119281canthony break; 3460805a2d48e7e2ed7d699871183ed706699119281canthony } 3461afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("unique-colors",option+1) == 0) 3462805a2d48e7e2ed7d699871183ed706699119281canthony { 346392c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=UniqueImageColors(_image,_exception); 3464805a2d48e7e2ed7d699871183ed706699119281canthony break; 3465805a2d48e7e2ed7d699871183ed706699119281canthony } 3466afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("unsharp",option+1) == 0) 3467805a2d48e7e2ed7d699871183ed706699119281canthony { 3468fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 346922de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 347022de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3471805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3472805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 3473805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XiValue) == 0) 3474805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.xi=1.0; 3475805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PsiValue) == 0) 3476805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.psi=0.05; 347792c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=UnsharpMaskImage(_image,geometry_info.rho, 34783afd4014cd833bc3c170cb54e37c925ceacd17decristy geometry_info.sigma,geometry_info.xi,geometry_info.psi,_exception); 3479805a2d48e7e2ed7d699871183ed706699119281canthony break; 3480805a2d48e7e2ed7d699871183ed706699119281canthony } 3481ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3482805a2d48e7e2ed7d699871183ed706699119281canthony } 3483805a2d48e7e2ed7d699871183ed706699119281canthony case 'v': 3484805a2d48e7e2ed7d699871183ed706699119281canthony { 3485afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("verbose",option+1) == 0) 3486805a2d48e7e2ed7d699871183ed706699119281canthony { 3487afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony /* FUTURE: move to SyncImageSettings() and AcquireImage()??? 348892c93bd35e207736d340f1b32000006a5bf6208eanthony three places! ImageArtifact ImageOption _image_info->verbose 34895330ae0b1ea1824ec58522aebfd27228592ad0a4anthony Some how new images also get this artifact! 349031f1bf7bb6ee2698a2afab42ee0329b11663636canthony */ 349192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) SetImageArtifact(_image,option+1, 3492afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony IfNormalOp ? "true" : "false" ); 3493805a2d48e7e2ed7d699871183ed706699119281canthony break; 3494805a2d48e7e2ed7d699871183ed706699119281canthony } 3495afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("vignette",option+1) == 0) 3496805a2d48e7e2ed7d699871183ed706699119281canthony { 3497fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 349822de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 349922de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3500805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3501805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 3502805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & XiValue) == 0) 350392c93bd35e207736d340f1b32000006a5bf6208eanthony geometry_info.xi=0.1*_image->columns; 3504805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & PsiValue) == 0) 350592c93bd35e207736d340f1b32000006a5bf6208eanthony geometry_info.psi=0.1*_image->rows; 35068e2392e316bec6019460d46c03a8f45b0619d72acristy if ((flags & PercentValue) != 0) 35078e2392e316bec6019460d46c03a8f45b0619d72acristy { 3508720d756a646312c8ab3af810acd1db8fa5801d15cristy geometry_info.xi*=(double) _image->columns/100.0; 3509720d756a646312c8ab3af810acd1db8fa5801d15cristy geometry_info.psi*=(double) _image->rows/100.0; 35108e2392e316bec6019460d46c03a8f45b0619d72acristy } 351192c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=VignetteImage(_image,geometry_info.rho,geometry_info.sigma, 3512aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy (ssize_t) ceil(geometry_info.xi-0.5),(ssize_t) 3513aa2c16cb5e695053aa78e40f66bc36fbef4b1ed1cristy ceil(geometry_info.psi-0.5),_exception); 3514805a2d48e7e2ed7d699871183ed706699119281canthony break; 3515805a2d48e7e2ed7d699871183ed706699119281canthony } 3516ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3517805a2d48e7e2ed7d699871183ed706699119281canthony } 3518805a2d48e7e2ed7d699871183ed706699119281canthony case 'w': 3519805a2d48e7e2ed7d699871183ed706699119281canthony { 3520afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("wave",option+1) == 0) 3521805a2d48e7e2ed7d699871183ed706699119281canthony { 3522fd706f930f397221c6ba26f112e96e262fb0ba2eanthony flags=ParseGeometry(arg1,&geometry_info); 352322de2722b682eb405b60ec6022a7546df994674eanthony if ((flags & (RhoValue|SigmaValue)) == 0) 352422de2722b682eb405b60ec6022a7546df994674eanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3525805a2d48e7e2ed7d699871183ed706699119281canthony if ((flags & SigmaValue) == 0) 3526805a2d48e7e2ed7d699871183ed706699119281canthony geometry_info.sigma=1.0; 352792c93bd35e207736d340f1b32000006a5bf6208eanthony new_image=WaveImage(_image,geometry_info.rho,geometry_info.sigma, 352823446631cb3aebb2403aaef5337136ce5f0d24deCristy _image->interpolate,_exception); 35296e3a82c240f2aea88544e19d12a64f3c410e58e9dirk break; 35306e3a82c240f2aea88544e19d12a64f3c410e58e9dirk } 35316e3a82c240f2aea88544e19d12a64f3c410e58e9dirk if (LocaleCompare("wavelet-denoise",option+1) == 0) 35326e3a82c240f2aea88544e19d12a64f3c410e58e9dirk { 35336e3a82c240f2aea88544e19d12a64f3c410e58e9dirk flags=ParseGeometry(arg1,&geometry_info); 35346e3a82c240f2aea88544e19d12a64f3c410e58e9dirk if ((flags & RhoValue) == 0) 35356e3a82c240f2aea88544e19d12a64f3c410e58e9dirk CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 3536ee21f7fb36205cfc893005142a1d208e247f81cfCristy if ((flags & PercentValue) != 0) 353723446631cb3aebb2403aaef5337136ce5f0d24deCristy { 353823446631cb3aebb2403aaef5337136ce5f0d24deCristy geometry_info.rho=QuantumRange*geometry_info.rho/100.0; 353923446631cb3aebb2403aaef5337136ce5f0d24deCristy geometry_info.sigma=QuantumRange*geometry_info.sigma/100.0; 354023446631cb3aebb2403aaef5337136ce5f0d24deCristy } 3541ee21f7fb36205cfc893005142a1d208e247f81cfCristy if ((flags & SigmaValue) == 0) 3542ee21f7fb36205cfc893005142a1d208e247f81cfCristy geometry_info.sigma=0.0; 3543c175941c171b5985ee33a4a9c988b2a4e8767b16Cristy new_image=WaveletDenoiseImage(_image,geometry_info.rho, 3544c175941c171b5985ee33a4a9c988b2a4e8767b16Cristy geometry_info.sigma,_exception); 3545805a2d48e7e2ed7d699871183ed706699119281canthony break; 3546805a2d48e7e2ed7d699871183ed706699119281canthony } 3547afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("white-threshold",option+1) == 0) 3548805a2d48e7e2ed7d699871183ed706699119281canthony { 35495d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 355052bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 355192c93bd35e207736d340f1b32000006a5bf6208eanthony (void) WhiteThresholdImage(_image,arg1,_exception); 3552805a2d48e7e2ed7d699871183ed706699119281canthony break; 3553805a2d48e7e2ed7d699871183ed706699119281canthony } 3554327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy if (LocaleCompare("write-mask",option+1) == 0) 3555327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy { 3556327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy /* Note: arguments do not have percent escapes expanded */ 3557327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy Image 3558327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy *mask; 3559327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy 3560327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy if (IfPlusOp) 3561327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy { /* Remove a mask. */ 3562327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy (void) SetImageMask(_image,WritePixelMask,(Image *) NULL, 3563327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy _exception); 3564327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy break; 3565327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy } 3566327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy /* Set the image mask. */ 3567327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy mask=GetImageCache(_image_info,arg1,_exception); 3568327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy if (mask == (Image *) NULL) 3569327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy break; 3570327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy (void) SetImageMask(_image,WritePixelMask,mask,_exception); 3571327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy mask=DestroyImage(mask); 3572327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy break; 3573327030cbe756eb9aa6c63d0bdebfc7cf3b5f06a7cristy } 3574ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3575805a2d48e7e2ed7d699871183ed706699119281canthony } 3576805a2d48e7e2ed7d699871183ed706699119281canthony default: 3577ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3578805a2d48e7e2ed7d699871183ed706699119281canthony } 3579964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* clean up percent escape interpreted strings */ 3580964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg1 != arg1n ) 3581964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=DestroyString((char *)arg1); 3582964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg2 != arg2n ) 3583964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=DestroyString((char *)arg2); 3584964d28ed4391c639c60c392807c9dfb09f933ba8anthony 3585964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* Replace current image with any image that was generated 3586964d28ed4391c639c60c392807c9dfb09f933ba8anthony and set image point to last image (so image->next is correct) */ 3587805a2d48e7e2ed7d699871183ed706699119281canthony if (new_image != (Image *) NULL) 358892c93bd35e207736d340f1b32000006a5bf6208eanthony ReplaceImageInListReturnLast(&_image,new_image); 3589fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 3590fe83185ff915c87796df33a8d90a1e0937b3d76fcristy return(MagickTrue); 359192c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image_info 359292c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _draw_info 359392c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _quantize_info 359492c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image 359592c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception 3596afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfNormalOp 3597afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfPlusOp 3598a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#undef IsNormalOp 3599a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#undef IsPlusOp 360031f1bf7bb6ee2698a2afab42ee0329b11663636canthony} 360131f1bf7bb6ee2698a2afab42ee0329b11663636canthony 3602fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate MagickBooleanType CLISimpleOperatorImages(MagickCLI *cli_wand, 36032c57b74e160f9b605d74dec24081309f28b83899cristy const char *option,const char *arg1,const char *arg2,ExceptionInfo *exception) 360431f1bf7bb6ee2698a2afab42ee0329b11663636canthony{ 3605c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony#if !USE_WAND_METHODS 360631f1bf7bb6ee2698a2afab42ee0329b11663636canthony size_t 360743f425dd7d5b33887726982b28ebfa06f5560636anthony n, 360831f1bf7bb6ee2698a2afab42ee0329b11663636canthony i; 3609c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony#endif 3610fd706f930f397221c6ba26f112e96e262fb0ba2eanthony 361143f425dd7d5b33887726982b28ebfa06f5560636anthony assert(cli_wand != (MagickCLI *) NULL); 3612e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->signature == MagickWandSignature); 3613e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->wand.signature == MagickWandSignature); 361443f425dd7d5b33887726982b28ebfa06f5560636anthony assert(cli_wand->wand.images != (Image *) NULL); /* images must be present */ 3615a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 3616d0792939dc18eff319129903f2627bd882a574aadirk if (cli_wand->wand.debug != MagickFalse) 3617a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(), 3618a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony "- Simple Operator: %s \"%s\" \"%s\"", option,arg1,arg2); 361931f1bf7bb6ee2698a2afab42ee0329b11663636canthony 3620afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#if !USE_WAND_METHODS 3621afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony /* FUTURE add appropriate tracing */ 362231f1bf7bb6ee2698a2afab42ee0329b11663636canthony i=0; 362343f425dd7d5b33887726982b28ebfa06f5560636anthony n=GetImageListLength(cli_wand->wand.images); 362443f425dd7d5b33887726982b28ebfa06f5560636anthony cli_wand->wand.images=GetFirstImageInList(cli_wand->wand.images); 3625afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony while (1) { 362631f1bf7bb6ee2698a2afab42ee0329b11663636canthony i++; 36272c57b74e160f9b605d74dec24081309f28b83899cristy CLISimpleOperatorImage(cli_wand, option, arg1, arg2,exception); 362843f425dd7d5b33887726982b28ebfa06f5560636anthony if ( cli_wand->wand.images->next == (Image *) NULL ) 362943f425dd7d5b33887726982b28ebfa06f5560636anthony break; 363043f425dd7d5b33887726982b28ebfa06f5560636anthony cli_wand->wand.images=cli_wand->wand.images->next; 363131f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 363243f425dd7d5b33887726982b28ebfa06f5560636anthony assert( i == n ); 363343f425dd7d5b33887726982b28ebfa06f5560636anthony cli_wand->wand.images=GetFirstImageInList(cli_wand->wand.images); 3634afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#else 3635afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony MagickResetIterator(&cli_wand->wand); 3636d0792939dc18eff319129903f2627bd882a574aadirk while (MagickNextImage(&cli_wand->wand) != MagickFalse) 363752b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImage(cli_wand, option, arg1, arg2,exception); 3638afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony MagickResetIterator(&cli_wand->wand); 3639afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#endif 3640fe83185ff915c87796df33a8d90a1e0937b3d76fcristy return(MagickTrue); 3641805a2d48e7e2ed7d699871183ed706699119281canthony} 3642805a2d48e7e2ed7d699871183ed706699119281canthony 3643805a2d48e7e2ed7d699871183ed706699119281canthony/* 3644805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3645805a2d48e7e2ed7d699871183ed706699119281canthony% % 3646805a2d48e7e2ed7d699871183ed706699119281canthony% % 3647805a2d48e7e2ed7d699871183ed706699119281canthony% % 364843f425dd7d5b33887726982b28ebfa06f5560636anthony+ C L I L i s t O p e r a t o r I m a g e s % 3649805a2d48e7e2ed7d699871183ed706699119281canthony% % 3650805a2d48e7e2ed7d699871183ed706699119281canthony% % 3651805a2d48e7e2ed7d699871183ed706699119281canthony% % 3652805a2d48e7e2ed7d699871183ed706699119281canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3653805a2d48e7e2ed7d699871183ed706699119281canthony% 365443f425dd7d5b33887726982b28ebfa06f5560636anthony% CLIListOperatorImages() applies a single operation that is apply to the 365531f1bf7bb6ee2698a2afab42ee0329b11663636canthony% entire image list as a whole. The result is often a complete replacment 3656c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% of the image list with a completely new list, or with just a single image 3657c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% result. 3658805a2d48e7e2ed7d699871183ed706699119281canthony% 3659805a2d48e7e2ed7d699871183ed706699119281canthony% The format of the MogrifyImage method is: 3660805a2d48e7e2ed7d699871183ed706699119281canthony% 3661fe83185ff915c87796df33a8d90a1e0937b3d76fcristy% MagickBooleanType CLIListOperatorImages(MagickCLI *cli_wand, 3662fe83185ff915c87796df33a8d90a1e0937b3d76fcristy% const char *option,const char *arg1,const char *arg2) 3663805a2d48e7e2ed7d699871183ed706699119281canthony% 3664805a2d48e7e2ed7d699871183ed706699119281canthony% A description of each parameter follows: 3665805a2d48e7e2ed7d699871183ed706699119281canthony% 366643f425dd7d5b33887726982b28ebfa06f5560636anthony% o cli_wand: structure holding settings to be applied 3667805a2d48e7e2ed7d699871183ed706699119281canthony% 366836a8c2cce82aeb1cb61a77fb15c4cf030348bd61anthony% o option: The option string for the operation 366936a8c2cce82aeb1cb61a77fb15c4cf030348bd61anthony% 367031f1bf7bb6ee2698a2afab42ee0329b11663636canthony% o arg1, arg2: optional argument strings to the operation 3671e5fcd3620310f12690ba2d00b4f5fa62f1bd1a6aanthony% arg2 is currently not used 36728b10b467b5c281df759ba33f9a4a9228509adc4danthony% 3673805a2d48e7e2ed7d699871183ed706699119281canthony*/ 3674fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate MagickBooleanType CLIListOperatorImages(MagickCLI *cli_wand, 3675fe83185ff915c87796df33a8d90a1e0937b3d76fcristy const char *option,const char *arg1n,const char *arg2n) 3676805a2d48e7e2ed7d699871183ed706699119281canthony{ 3677a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char /* percent escaped versions of the args */ 3678a30f8e619f24abab21448ee8019794e47e0baed9cristy *arg1, 3679a30f8e619f24abab21448ee8019794e47e0baed9cristy *arg2; 36802a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony 368131f1bf7bb6ee2698a2afab42ee0329b11663636canthony Image 368231f1bf7bb6ee2698a2afab42ee0329b11663636canthony *new_images; 3683805a2d48e7e2ed7d699871183ed706699119281canthony 3684a30f8e619f24abab21448ee8019794e47e0baed9cristy MagickStatusType 3685a30f8e619f24abab21448ee8019794e47e0baed9cristy status; 3686a30f8e619f24abab21448ee8019794e47e0baed9cristy 3687a30f8e619f24abab21448ee8019794e47e0baed9cristy ssize_t 3688a30f8e619f24abab21448ee8019794e47e0baed9cristy parse; 3689964d28ed4391c639c60c392807c9dfb09f933ba8anthony 36902e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _image_info (cli_wand->wand.image_info) 36912e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _images (cli_wand->wand.images) 36922e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _exception (cli_wand->wand.exception) 36932e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _draw_info (cli_wand->draw_info) 36942e4501b56bdc589397786ecc59f8c2d206547a36anthony#define _quantize_info (cli_wand->quantize_info) 3695964d28ed4391c639c60c392807c9dfb09f933ba8anthony#define _process_flags (cli_wand->process_flags) 3696964d28ed4391c639c60c392807c9dfb09f933ba8anthony#define _option_type ((CommandOptionFlags) cli_wand->command->flags) 3697afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define IfNormalOp (*option=='-') 3698afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#define IfPlusOp (*option!='-') 3699b9dbc296c59e91df014757130b4e584c7fb6c74ddirk#define IsNormalOp IfNormalOp ? MagickTrue : MagickFalse 3700805a2d48e7e2ed7d699871183ed706699119281canthony 370143f425dd7d5b33887726982b28ebfa06f5560636anthony assert(cli_wand != (MagickCLI *) NULL); 3702e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->signature == MagickWandSignature); 3703e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->wand.signature == MagickWandSignature); 370492c93bd35e207736d340f1b32000006a5bf6208eanthony assert(_images != (Image *) NULL); /* _images must be present */ 3705a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 3706d0792939dc18eff319129903f2627bd882a574aadirk if (cli_wand->wand.debug != MagickFalse) 3707a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(), 3708606b923f678eaa2cdfe8f7b2e2390b75c6d9ce4dcristy "- List Operator: %s \"%s\" \"%s\"", option, 3709606b923f678eaa2cdfe8f7b2e2390b75c6d9ce4dcristy arg1n == (const char *) NULL ? "null" : arg1n, 3710606b923f678eaa2cdfe8f7b2e2390b75c6d9ce4dcristy arg2n == (const char *) NULL ? "null" : arg2n); 371131f1bf7bb6ee2698a2afab42ee0329b11663636canthony 3712964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1 = arg1n; 3713964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2 = arg2n; 3714a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 3715a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* Interpret Percent Escapes in Arguments - using first image */ 3716964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( (((_process_flags & ProcessInterpretProperities) != 0 ) 3717964d28ed4391c639c60c392807c9dfb09f933ba8anthony || ((_option_type & AlwaysInterpretArgsFlag) != 0) 3718964d28ed4391c639c60c392807c9dfb09f933ba8anthony ) && ((_option_type & NeverInterpretArgsFlag) == 0) ) { 3719964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* Interpret Percent escapes in argument 1 */ 3720964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg1n != (char *) NULL) { 3721964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=InterpretImageProperties(_image_info,_images,arg1n,_exception); 3722964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg1 == (char *) NULL) { 3723964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 3724964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=arg1n; /* use the given argument as is */ 3725964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 3726964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 3727964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg2n != (char *) NULL) { 3728964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception); 3729964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg2 == (char *) NULL) { 3730964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 3731964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=arg2n; /* use the given argument as is */ 3732964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 3733964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 3734964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 37354837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags 3736964d28ed4391c639c60c392807c9dfb09f933ba8anthony#undef _option_type 3737964d28ed4391c639c60c392807c9dfb09f933ba8anthony 3738fe83185ff915c87796df33a8d90a1e0937b3d76fcristy status=MagickTrue; 373931f1bf7bb6ee2698a2afab42ee0329b11663636canthony new_images=NewImageList(); 374031f1bf7bb6ee2698a2afab42ee0329b11663636canthony 3741afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony switch (*(option+1)) 3742805a2d48e7e2ed7d699871183ed706699119281canthony { 3743805a2d48e7e2ed7d699871183ed706699119281canthony case 'a': 3744805a2d48e7e2ed7d699871183ed706699119281canthony { 3745afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("append",option+1) == 0) 3746805a2d48e7e2ed7d699871183ed706699119281canthony { 3747a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony new_images=AppendImages(_images,IsNormalOp,_exception); 3748805a2d48e7e2ed7d699871183ed706699119281canthony break; 3749805a2d48e7e2ed7d699871183ed706699119281canthony } 375052ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy if (LocaleCompare("average",option+1) == 0) 375152ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy { 375252ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy CLIWandWarnReplaced("-evaluate-sequence Mean"); 375352b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLIListOperatorImages(cli_wand,"-evaluate-sequence","Mean",NULL); 375452ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy break; 375552ad9e9f4dcd7d29b2c78aede281621c33df1ce1cristy } 3756ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3757805a2d48e7e2ed7d699871183ed706699119281canthony } 3758805a2d48e7e2ed7d699871183ed706699119281canthony case 'c': 3759805a2d48e7e2ed7d699871183ed706699119281canthony { 37605f257b2f02bdd982d9bbfe612f5bb1711608590ccristy if (LocaleCompare("channel-fx",option+1) == 0) 376187c02f455d992b02a5e4727bc75552d7d097c4fbcristy { 376292c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=ChannelFxImage(_images,arg1,_exception); 376387c02f455d992b02a5e4727bc75552d7d097c4fbcristy break; 376487c02f455d992b02a5e4727bc75552d7d097c4fbcristy } 3765afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("clut",option+1) == 0) 3766805a2d48e7e2ed7d699871183ed706699119281canthony { 3767805a2d48e7e2ed7d699871183ed706699119281canthony Image 376831f1bf7bb6ee2698a2afab42ee0329b11663636canthony *clut_image; 3769805a2d48e7e2ed7d699871183ed706699119281canthony 3770afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony /* FUTURE - make this a compose option, and thus can be used 3771afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony with layers compose or even compose last image over all other 377292c93bd35e207736d340f1b32000006a5bf6208eanthony _images. 377387c02f455d992b02a5e4727bc75552d7d097c4fbcristy */ 377492c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=RemoveFirstImageFromList(&_images); 377592c93bd35e207736d340f1b32000006a5bf6208eanthony clut_image=RemoveLastImageFromList(&_images); 3776e8f56490b69cb12652819c7015e16bb03c1dab98anthony /* FUTURE - produce Exception, rather than silent fail */ 3777805a2d48e7e2ed7d699871183ed706699119281canthony if (clut_image == (Image *) NULL) 377887c02f455d992b02a5e4727bc75552d7d097c4fbcristy break; 3779f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy (void) ClutImage(new_images,clut_image,new_images->interpolate, 3780f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy _exception); 3781805a2d48e7e2ed7d699871183ed706699119281canthony clut_image=DestroyImage(clut_image); 3782805a2d48e7e2ed7d699871183ed706699119281canthony break; 3783805a2d48e7e2ed7d699871183ed706699119281canthony } 3784afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("coalesce",option+1) == 0) 3785805a2d48e7e2ed7d699871183ed706699119281canthony { 378692c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=CoalesceImages(_images,_exception); 3787805a2d48e7e2ed7d699871183ed706699119281canthony break; 3788805a2d48e7e2ed7d699871183ed706699119281canthony } 3789afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("combine",option+1) == 0) 3790805a2d48e7e2ed7d699871183ed706699119281canthony { 37919a0e8ef1662a4df65cec07f507b74290b08d262fcristy parse=(ssize_t) _images->colorspace; 37925a4ff37398c7bc97588bd66d840cda9c653cec5eanthony if ( IfPlusOp ) 3793f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy parse=ParseCommandOption(MagickColorspaceOptions,MagickFalse,arg1); 37948448a0dd99a8d313d445bbbe714af4ba7c8eab69cristy if (parse < 0) 37958448a0dd99a8d313d445bbbe714af4ba7c8eab69cristy CLIWandExceptArgBreak(OptionError,"UnrecognizedColorspace",option, 37968448a0dd99a8d313d445bbbe714af4ba7c8eab69cristy arg1); 379746f354c5b98873dc772eea3fbbf149abbf737690cristy new_images=CombineImages(_images,(ColorspaceType) parse,_exception); 3798805a2d48e7e2ed7d699871183ed706699119281canthony break; 3799805a2d48e7e2ed7d699871183ed706699119281canthony } 3800e863c054d49031af35b73066f5394af223de7df5cristy if (LocaleCompare("compare",option+1) == 0) 3801e863c054d49031af35b73066f5394af223de7df5cristy { 3802e863c054d49031af35b73066f5394af223de7df5cristy double 3803e863c054d49031af35b73066f5394af223de7df5cristy distortion; 3804e863c054d49031af35b73066f5394af223de7df5cristy 3805e863c054d49031af35b73066f5394af223de7df5cristy Image 3806e863c054d49031af35b73066f5394af223de7df5cristy *image, 3807e863c054d49031af35b73066f5394af223de7df5cristy *reconstruct_image; 3808e863c054d49031af35b73066f5394af223de7df5cristy 3809e863c054d49031af35b73066f5394af223de7df5cristy MetricType 3810e863c054d49031af35b73066f5394af223de7df5cristy metric; 3811e863c054d49031af35b73066f5394af223de7df5cristy 3812e863c054d49031af35b73066f5394af223de7df5cristy /* 3813e863c054d49031af35b73066f5394af223de7df5cristy Mathematically and visually annotate the difference between an 3814e863c054d49031af35b73066f5394af223de7df5cristy image and its reconstruction. 3815e863c054d49031af35b73066f5394af223de7df5cristy */ 3816e863c054d49031af35b73066f5394af223de7df5cristy image=RemoveFirstImageFromList(&_images); 3817e863c054d49031af35b73066f5394af223de7df5cristy reconstruct_image=RemoveFirstImageFromList(&_images); 3818e863c054d49031af35b73066f5394af223de7df5cristy /* FUTURE - produce Exception, rather than silent fail */ 3819e863c054d49031af35b73066f5394af223de7df5cristy if (reconstruct_image == (Image *) NULL) 3820e863c054d49031af35b73066f5394af223de7df5cristy break; 3821e863c054d49031af35b73066f5394af223de7df5cristy metric=UndefinedErrorMetric; 3822e863c054d49031af35b73066f5394af223de7df5cristy option=GetImageOption(_image_info,"metric"); 3823e863c054d49031af35b73066f5394af223de7df5cristy if (option != (const char *) NULL) 3824e863c054d49031af35b73066f5394af223de7df5cristy metric=(MetricType) ParseCommandOption(MagickMetricOptions, 3825e863c054d49031af35b73066f5394af223de7df5cristy MagickFalse,option); 3826e863c054d49031af35b73066f5394af223de7df5cristy new_images=CompareImages(image,reconstruct_image,metric,&distortion, 3827e863c054d49031af35b73066f5394af223de7df5cristy _exception); 3828e863c054d49031af35b73066f5394af223de7df5cristy (void) distortion; 3829e863c054d49031af35b73066f5394af223de7df5cristy reconstruct_image=DestroyImage(reconstruct_image); 3830e863c054d49031af35b73066f5394af223de7df5cristy image=DestroyImage(image); 3831e863c054d49031af35b73066f5394af223de7df5cristy break; 3832e863c054d49031af35b73066f5394af223de7df5cristy } 3833790190d9d1e6f011220d0003ce5b51063f0ab417cristy if (LocaleCompare("complex",option+1) == 0) 3834790190d9d1e6f011220d0003ce5b51063f0ab417cristy { 3835790190d9d1e6f011220d0003ce5b51063f0ab417cristy parse=ParseCommandOption(MagickComplexOptions,MagickFalse,arg1); 3836790190d9d1e6f011220d0003ce5b51063f0ab417cristy if (parse < 0) 3837790190d9d1e6f011220d0003ce5b51063f0ab417cristy CLIWandExceptArgBreak(OptionError,"UnrecognizedEvaluateOperator", 3838790190d9d1e6f011220d0003ce5b51063f0ab417cristy option,arg1); 3839b8f66bb8eff1466dddbd26a31d588a6cd355d0f4cristy new_images=ComplexImages(_images,(ComplexOperator) parse,_exception); 3840790190d9d1e6f011220d0003ce5b51063f0ab417cristy break; 3841790190d9d1e6f011220d0003ce5b51063f0ab417cristy } 3842afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("composite",option+1) == 0) 3843805a2d48e7e2ed7d699871183ed706699119281canthony { 3844feb3e9695150978a5d2372d3fe2f60466a7c8066cristy CompositeOperator 3845feb3e9695150978a5d2372d3fe2f60466a7c8066cristy compose; 3846feb3e9695150978a5d2372d3fe2f60466a7c8066cristy 3847feb3e9695150978a5d2372d3fe2f60466a7c8066cristy const char* 3848feb3e9695150978a5d2372d3fe2f60466a7c8066cristy value; 3849feb3e9695150978a5d2372d3fe2f60466a7c8066cristy 3850feb3e9695150978a5d2372d3fe2f60466a7c8066cristy MagickBooleanType 3851feb3e9695150978a5d2372d3fe2f60466a7c8066cristy clip_to_self; 3852feb3e9695150978a5d2372d3fe2f60466a7c8066cristy 3853805a2d48e7e2ed7d699871183ed706699119281canthony Image 3854805a2d48e7e2ed7d699871183ed706699119281canthony *mask_image, 385531f1bf7bb6ee2698a2afab42ee0329b11663636canthony *source_image; 3856805a2d48e7e2ed7d699871183ed706699119281canthony 3857805a2d48e7e2ed7d699871183ed706699119281canthony RectangleInfo 3858805a2d48e7e2ed7d699871183ed706699119281canthony geometry; 3859805a2d48e7e2ed7d699871183ed706699119281canthony 38607bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony /* Compose value from "-compose" option only */ 386192c93bd35e207736d340f1b32000006a5bf6208eanthony value=GetImageOption(_image_info,"compose"); 3862542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy if (value == (const char *) NULL) 386331f1bf7bb6ee2698a2afab42ee0329b11663636canthony compose=OverCompositeOp; /* use Over not source_image->compose */ 3864542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy else 3865542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy compose=(CompositeOperator) ParseCommandOption(MagickComposeOptions, 3866542a95bf123eda9ec6613f2ebb80627c0853a4bdcristy MagickFalse,value); 38675f867ae6899e46eb35c30b38e9479312880608cfanthony 38687bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony /* Get "clip-to-self" expert setting (false is normal) */ 3869ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy value=GetImageOption(_image_info,"compose:clip-to-self"); 3870ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy if (value == (const char *) NULL) 3871ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy clip_to_self=MagickTrue; 3872ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy else 3873ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy clip_to_self=IsStringTrue(GetImageOption(_image_info, 3874ca0e82c7d9d6994cd677d9848d9ad2dff1afb031cristy "compose:clip-to-self")); /* if this is true */ 38752e4501b56bdc589397786ecc59f8c2d206547a36anthony value=GetImageOption(_image_info,"compose:outside-overlay"); 38767bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony if (value != (const char *) NULL) { /* or this false */ 38772e4501b56bdc589397786ecc59f8c2d206547a36anthony /* FUTURE: depreciate warning for "compose:outside-overlay"*/ 38789a846de2088aabf3d58a275d2157b40c53d8597ddirk clip_to_self=IsStringFalse(value); 38792e4501b56bdc589397786ecc59f8c2d206547a36anthony } 38802e4501b56bdc589397786ecc59f8c2d206547a36anthony 388192c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=RemoveFirstImageFromList(&_images); 388292c93bd35e207736d340f1b32000006a5bf6208eanthony source_image=RemoveFirstImageFromList(&_images); 388331f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (source_image == (Image *) NULL) 38847bcfe7f0f9a0028eb9efdb79c842eb50e909dc45anthony break; /* FUTURE - produce Exception, rather than silent fail */ 3885e8f56490b69cb12652819c7015e16bb03c1dab98anthony 388631f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* FUTURE - this should not be here! - should be part of -geometry */ 388706f590165f0505d42005264893fe14a9e8a79986dirk if (source_image->geometry != (char *) NULL) 388806f590165f0505d42005264893fe14a9e8a79986dirk { 388906f590165f0505d42005264893fe14a9e8a79986dirk RectangleInfo 389006f590165f0505d42005264893fe14a9e8a79986dirk resize_geometry; 389106f590165f0505d42005264893fe14a9e8a79986dirk 389206f590165f0505d42005264893fe14a9e8a79986dirk (void) ParseRegionGeometry(source_image,source_image->geometry, 389306f590165f0505d42005264893fe14a9e8a79986dirk &resize_geometry,_exception); 389406f590165f0505d42005264893fe14a9e8a79986dirk if ((source_image->columns != resize_geometry.width) || 389506f590165f0505d42005264893fe14a9e8a79986dirk (source_image->rows != resize_geometry.height)) 389606f590165f0505d42005264893fe14a9e8a79986dirk { 389706f590165f0505d42005264893fe14a9e8a79986dirk Image 389806f590165f0505d42005264893fe14a9e8a79986dirk *resize_image; 389906f590165f0505d42005264893fe14a9e8a79986dirk 390006f590165f0505d42005264893fe14a9e8a79986dirk resize_image=ResizeImage(source_image,resize_geometry.width, 390106f590165f0505d42005264893fe14a9e8a79986dirk resize_geometry.height,source_image->filter,_exception); 390206f590165f0505d42005264893fe14a9e8a79986dirk if (resize_image != (Image *) NULL) 390306f590165f0505d42005264893fe14a9e8a79986dirk { 390406f590165f0505d42005264893fe14a9e8a79986dirk source_image=DestroyImage(source_image); 390506f590165f0505d42005264893fe14a9e8a79986dirk source_image=resize_image; 390606f590165f0505d42005264893fe14a9e8a79986dirk } 390706f590165f0505d42005264893fe14a9e8a79986dirk } 390806f590165f0505d42005264893fe14a9e8a79986dirk } 390931f1bf7bb6ee2698a2afab42ee0329b11663636canthony SetGeometry(source_image,&geometry); 391031f1bf7bb6ee2698a2afab42ee0329b11663636canthony (void) ParseAbsoluteGeometry(source_image->geometry,&geometry); 391131f1bf7bb6ee2698a2afab42ee0329b11663636canthony GravityAdjustGeometry(new_images->columns,new_images->rows, 3912fe83185ff915c87796df33a8d90a1e0937b3d76fcristy new_images->gravity, &geometry); 391392c93bd35e207736d340f1b32000006a5bf6208eanthony mask_image=RemoveFirstImageFromList(&_images); 3914052d1f731e137ec086ffcef53d586dbd3f100ecacristy if (mask_image == (Image *) NULL) 3915052d1f731e137ec086ffcef53d586dbd3f100ecacristy status&=CompositeImage(new_images,source_image,compose,clip_to_self, 3916052d1f731e137ec086ffcef53d586dbd3f100ecacristy geometry.x,geometry.y,_exception); 3917052d1f731e137ec086ffcef53d586dbd3f100ecacristy else 3918fe83185ff915c87796df33a8d90a1e0937b3d76fcristy { 3919052d1f731e137ec086ffcef53d586dbd3f100ecacristy if ((compose == DisplaceCompositeOp) || 3920052d1f731e137ec086ffcef53d586dbd3f100ecacristy (compose == DistortCompositeOp)) 3921052d1f731e137ec086ffcef53d586dbd3f100ecacristy { 3922052d1f731e137ec086ffcef53d586dbd3f100ecacristy status&=CompositeImage(source_image,mask_image, 3923052d1f731e137ec086ffcef53d586dbd3f100ecacristy CopyGreenCompositeOp,MagickTrue,0,0,_exception); 3924052d1f731e137ec086ffcef53d586dbd3f100ecacristy status&=CompositeImage(new_images,source_image,compose, 3925052d1f731e137ec086ffcef53d586dbd3f100ecacristy clip_to_self,geometry.x,geometry.y,_exception); 3926052d1f731e137ec086ffcef53d586dbd3f100ecacristy } 3927fae52a29ca85d21c229f1e4e44a0dcfc4d322284cristy else 3928052d1f731e137ec086ffcef53d586dbd3f100ecacristy { 3929052d1f731e137ec086ffcef53d586dbd3f100ecacristy Image 3930052d1f731e137ec086ffcef53d586dbd3f100ecacristy *clone_image; 3931052d1f731e137ec086ffcef53d586dbd3f100ecacristy 3932052d1f731e137ec086ffcef53d586dbd3f100ecacristy clone_image=CloneImage(new_images,0,0,MagickTrue,_exception); 3933052d1f731e137ec086ffcef53d586dbd3f100ecacristy if (clone_image == (Image *) NULL) 3934052d1f731e137ec086ffcef53d586dbd3f100ecacristy break; 3935052d1f731e137ec086ffcef53d586dbd3f100ecacristy status&=CompositeImage(new_images,source_image,compose, 3936052d1f731e137ec086ffcef53d586dbd3f100ecacristy clip_to_self,geometry.x,geometry.y,_exception); 3937052d1f731e137ec086ffcef53d586dbd3f100ecacristy status&=CompositeImage(new_images,mask_image, 3938052d1f731e137ec086ffcef53d586dbd3f100ecacristy CopyAlphaCompositeOp,MagickTrue,0,0,_exception); 3939052d1f731e137ec086ffcef53d586dbd3f100ecacristy status&=CompositeImage(clone_image,new_images,OverCompositeOp, 3940087a059e56eec2efedefdceb6b52a093e4589ddeCristy clip_to_self,0,0,_exception); 3941052d1f731e137ec086ffcef53d586dbd3f100ecacristy new_images=DestroyImage(new_images); 3942052d1f731e137ec086ffcef53d586dbd3f100ecacristy new_images=clone_image; 3943052d1f731e137ec086ffcef53d586dbd3f100ecacristy } 3944fe83185ff915c87796df33a8d90a1e0937b3d76fcristy mask_image=DestroyImage(mask_image); 3945805a2d48e7e2ed7d699871183ed706699119281canthony } 394631f1bf7bb6ee2698a2afab42ee0329b11663636canthony source_image=DestroyImage(source_image); 3947805a2d48e7e2ed7d699871183ed706699119281canthony break; 3948805a2d48e7e2ed7d699871183ed706699119281canthony } 39498c4c1c490787a76080c895d8d500b3159b8714e3cristy if (LocaleCompare("copy",option+1) == 0) 39508c4c1c490787a76080c895d8d500b3159b8714e3cristy { 39518c4c1c490787a76080c895d8d500b3159b8714e3cristy Image 39528c4c1c490787a76080c895d8d500b3159b8714e3cristy *source_image; 39538c4c1c490787a76080c895d8d500b3159b8714e3cristy 39548c4c1c490787a76080c895d8d500b3159b8714e3cristy OffsetInfo 39558c4c1c490787a76080c895d8d500b3159b8714e3cristy offset; 39568c4c1c490787a76080c895d8d500b3159b8714e3cristy 39578c4c1c490787a76080c895d8d500b3159b8714e3cristy RectangleInfo 39588c4c1c490787a76080c895d8d500b3159b8714e3cristy geometry; 39598c4c1c490787a76080c895d8d500b3159b8714e3cristy 39608c4c1c490787a76080c895d8d500b3159b8714e3cristy /* 39618c4c1c490787a76080c895d8d500b3159b8714e3cristy Copy image pixels. 39628c4c1c490787a76080c895d8d500b3159b8714e3cristy */ 39635d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 39648c4c1c490787a76080c895d8d500b3159b8714e3cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 39655d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg2) == MagickFalse) 39668c4c1c490787a76080c895d8d500b3159b8714e3cristy CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 39678c4c1c490787a76080c895d8d500b3159b8714e3cristy (void) ParsePageGeometry(_images,arg2,&geometry,_exception); 39688c4c1c490787a76080c895d8d500b3159b8714e3cristy offset.x=geometry.x; 39698c4c1c490787a76080c895d8d500b3159b8714e3cristy offset.y=geometry.y; 39708c4c1c490787a76080c895d8d500b3159b8714e3cristy source_image=_images; 39718c4c1c490787a76080c895d8d500b3159b8714e3cristy if (source_image->next != (Image *) NULL) 39728c4c1c490787a76080c895d8d500b3159b8714e3cristy source_image=source_image->next; 3973923019bfcb8dccda226cbbccbab58a8f33f3f0b1cristy (void) ParsePageGeometry(source_image,arg1,&geometry,_exception); 39748c4c1c490787a76080c895d8d500b3159b8714e3cristy (void) CopyImagePixels(_images,source_image,&geometry,&offset, 39758c4c1c490787a76080c895d8d500b3159b8714e3cristy _exception); 39768c4c1c490787a76080c895d8d500b3159b8714e3cristy break; 39778c4c1c490787a76080c895d8d500b3159b8714e3cristy } 3978ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 3979805a2d48e7e2ed7d699871183ed706699119281canthony } 3980805a2d48e7e2ed7d699871183ed706699119281canthony case 'd': 3981805a2d48e7e2ed7d699871183ed706699119281canthony { 3982afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("deconstruct",option+1) == 0) 3983805a2d48e7e2ed7d699871183ed706699119281canthony { 3984464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("-layer CompareAny"); 398552b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLIListOperatorImages(cli_wand,"-layer","CompareAny",NULL); 3986805a2d48e7e2ed7d699871183ed706699119281canthony break; 3987805a2d48e7e2ed7d699871183ed706699119281canthony } 3988afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("delete",option+1) == 0) 3989805a2d48e7e2ed7d699871183ed706699119281canthony { 3990afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfNormalOp) 399192c93bd35e207736d340f1b32000006a5bf6208eanthony DeleteImages(&_images,arg1,_exception); 3992afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony else 399392c93bd35e207736d340f1b32000006a5bf6208eanthony DeleteImages(&_images,"-1",_exception); 3994805a2d48e7e2ed7d699871183ed706699119281canthony break; 3995805a2d48e7e2ed7d699871183ed706699119281canthony } 3996afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("duplicate",option+1) == 0) 3997805a2d48e7e2ed7d699871183ed706699119281canthony { 3998afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfNormalOp) 3999805a2d48e7e2ed7d699871183ed706699119281canthony { 4000805a2d48e7e2ed7d699871183ed706699119281canthony const char 4001805a2d48e7e2ed7d699871183ed706699119281canthony *p; 4002805a2d48e7e2ed7d699871183ed706699119281canthony 4003805a2d48e7e2ed7d699871183ed706699119281canthony size_t 4004805a2d48e7e2ed7d699871183ed706699119281canthony number_duplicates; 4005805a2d48e7e2ed7d699871183ed706699119281canthony 40065d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 4007ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option, 4008ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony arg1); 400931f1bf7bb6ee2698a2afab42ee0329b11663636canthony number_duplicates=(size_t) StringToLong(arg1); 401031f1bf7bb6ee2698a2afab42ee0329b11663636canthony p=strchr(arg1,','); 4011805a2d48e7e2ed7d699871183ed706699119281canthony if (p == (const char *) NULL) 4012ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony new_images=DuplicateImages(_images,number_duplicates,"-1", 4013ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony _exception); 4014805a2d48e7e2ed7d699871183ed706699119281canthony else 401592c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=DuplicateImages(_images,number_duplicates,p, 401692c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 4017805a2d48e7e2ed7d699871183ed706699119281canthony } 4018afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony else 401992c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=DuplicateImages(_images,1,"-1",_exception); 402092c93bd35e207736d340f1b32000006a5bf6208eanthony AppendImageToList(&_images, new_images); 4021f432c635c526259b858c9aad3d409c5c44545686cristy new_images=(Image *) NULL; 4022805a2d48e7e2ed7d699871183ed706699119281canthony break; 4023805a2d48e7e2ed7d699871183ed706699119281canthony } 4024ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4025805a2d48e7e2ed7d699871183ed706699119281canthony } 4026805a2d48e7e2ed7d699871183ed706699119281canthony case 'e': 4027805a2d48e7e2ed7d699871183ed706699119281canthony { 4028afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("evaluate-sequence",option+1) == 0) 4029805a2d48e7e2ed7d699871183ed706699119281canthony { 4030790190d9d1e6f011220d0003ce5b51063f0ab417cristy parse=ParseCommandOption(MagickEvaluateOptions,MagickFalse,arg1); 4031790190d9d1e6f011220d0003ce5b51063f0ab417cristy if (parse < 0) 40322a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedEvaluateOperator", 4033790190d9d1e6f011220d0003ce5b51063f0ab417cristy option,arg1); 40342a0ec8c3d9bd4358e9b6458e63b46d91826db2f9anthony new_images=EvaluateImages(_images,(MagickEvaluateOperator)parse, 4035790190d9d1e6f011220d0003ce5b51063f0ab417cristy _exception); 4036805a2d48e7e2ed7d699871183ed706699119281canthony break; 4037805a2d48e7e2ed7d699871183ed706699119281canthony } 4038ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4039805a2d48e7e2ed7d699871183ed706699119281canthony } 4040805a2d48e7e2ed7d699871183ed706699119281canthony case 'f': 4041805a2d48e7e2ed7d699871183ed706699119281canthony { 4042afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("fft",option+1) == 0) 4043805a2d48e7e2ed7d699871183ed706699119281canthony { 4044f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy new_images=ForwardFourierTransformImage(_images,IsNormalOp, 4045f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy _exception); 4046805a2d48e7e2ed7d699871183ed706699119281canthony break; 4047805a2d48e7e2ed7d699871183ed706699119281canthony } 4048afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("flatten",option+1) == 0) 4049805a2d48e7e2ed7d699871183ed706699119281canthony { 4050319dac6e2a04826b9cc8d2784549c08fd34f8879anthony /* REDIRECTED to use -layers flatten instead */ 405152b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLIListOperatorImages(cli_wand,"-layers",option+1,NULL); 4052805a2d48e7e2ed7d699871183ed706699119281canthony break; 4053805a2d48e7e2ed7d699871183ed706699119281canthony } 4054afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("fx",option+1) == 0) 4055805a2d48e7e2ed7d699871183ed706699119281canthony { 405692c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=FxImage(_images,arg1,_exception); 4057805a2d48e7e2ed7d699871183ed706699119281canthony break; 4058805a2d48e7e2ed7d699871183ed706699119281canthony } 4059ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4060805a2d48e7e2ed7d699871183ed706699119281canthony } 4061805a2d48e7e2ed7d699871183ed706699119281canthony case 'h': 4062805a2d48e7e2ed7d699871183ed706699119281canthony { 4063afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("hald-clut",option+1) == 0) 4064805a2d48e7e2ed7d699871183ed706699119281canthony { 406531f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* FUTURE - make this a compose option (and thus layers compose ) 406692c93bd35e207736d340f1b32000006a5bf6208eanthony or perhaps compose last image over all other _images. 406731f1bf7bb6ee2698a2afab42ee0329b11663636canthony */ 4068805a2d48e7e2ed7d699871183ed706699119281canthony Image 406931f1bf7bb6ee2698a2afab42ee0329b11663636canthony *hald_image; 4070805a2d48e7e2ed7d699871183ed706699119281canthony 407192c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=RemoveFirstImageFromList(&_images); 407292c93bd35e207736d340f1b32000006a5bf6208eanthony hald_image=RemoveLastImageFromList(&_images); 4073805a2d48e7e2ed7d699871183ed706699119281canthony if (hald_image == (Image *) NULL) 407431f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 407592c93bd35e207736d340f1b32000006a5bf6208eanthony (void) HaldClutImage(new_images,hald_image,_exception); 4076805a2d48e7e2ed7d699871183ed706699119281canthony hald_image=DestroyImage(hald_image); 4077805a2d48e7e2ed7d699871183ed706699119281canthony break; 4078805a2d48e7e2ed7d699871183ed706699119281canthony } 4079ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4080805a2d48e7e2ed7d699871183ed706699119281canthony } 4081805a2d48e7e2ed7d699871183ed706699119281canthony case 'i': 4082805a2d48e7e2ed7d699871183ed706699119281canthony { 4083afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("ift",option+1) == 0) 4084805a2d48e7e2ed7d699871183ed706699119281canthony { 4085805a2d48e7e2ed7d699871183ed706699119281canthony Image 4086805a2d48e7e2ed7d699871183ed706699119281canthony *magnitude_image, 4087805a2d48e7e2ed7d699871183ed706699119281canthony *phase_image; 4088805a2d48e7e2ed7d699871183ed706699119281canthony 408992c93bd35e207736d340f1b32000006a5bf6208eanthony magnitude_image=RemoveFirstImageFromList(&_images); 409092c93bd35e207736d340f1b32000006a5bf6208eanthony phase_image=RemoveFirstImageFromList(&_images); 4091e8f56490b69cb12652819c7015e16bb03c1dab98anthony /* FUTURE - produce Exception, rather than silent fail */ 409231f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (phase_image == (Image *) NULL) 409331f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 409431f1bf7bb6ee2698a2afab42ee0329b11663636canthony new_images=InverseFourierTransformImage(magnitude_image,phase_image, 4095f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy IsNormalOp,_exception); 409631f1bf7bb6ee2698a2afab42ee0329b11663636canthony magnitude_image=DestroyImage(magnitude_image); 409731f1bf7bb6ee2698a2afab42ee0329b11663636canthony phase_image=DestroyImage(phase_image); 4098805a2d48e7e2ed7d699871183ed706699119281canthony break; 4099805a2d48e7e2ed7d699871183ed706699119281canthony } 4100afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("insert",option+1) == 0) 4101805a2d48e7e2ed7d699871183ed706699119281canthony { 4102805a2d48e7e2ed7d699871183ed706699119281canthony Image 410331f1bf7bb6ee2698a2afab42ee0329b11663636canthony *insert_image, 410431f1bf7bb6ee2698a2afab42ee0329b11663636canthony *index_image; 410531f1bf7bb6ee2698a2afab42ee0329b11663636canthony 410631f1bf7bb6ee2698a2afab42ee0329b11663636canthony ssize_t 410731f1bf7bb6ee2698a2afab42ee0329b11663636canthony index; 4108805a2d48e7e2ed7d699871183ed706699119281canthony 41095d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IfNormalOp && (IsGeometry(arg1) == MagickFalse)) 4110fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 4111805a2d48e7e2ed7d699871183ed706699119281canthony index=0; 411292c93bd35e207736d340f1b32000006a5bf6208eanthony insert_image=RemoveLastImageFromList(&_images); 4113afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (IfNormalOp) 411431f1bf7bb6ee2698a2afab42ee0329b11663636canthony index=(ssize_t) StringToLong(arg1); 411543f425dd7d5b33887726982b28ebfa06f5560636anthony index_image=insert_image; 4116805a2d48e7e2ed7d699871183ed706699119281canthony if (index == 0) 411792c93bd35e207736d340f1b32000006a5bf6208eanthony PrependImageToList(&_images,insert_image); 411892c93bd35e207736d340f1b32000006a5bf6208eanthony else if (index == (ssize_t) GetImageListLength(_images)) 411992c93bd35e207736d340f1b32000006a5bf6208eanthony AppendImageToList(&_images,insert_image); 4120805a2d48e7e2ed7d699871183ed706699119281canthony else 412143f425dd7d5b33887726982b28ebfa06f5560636anthony { 412292c93bd35e207736d340f1b32000006a5bf6208eanthony index_image=GetImageFromList(_images,index-1); 412343f425dd7d5b33887726982b28ebfa06f5560636anthony if (index_image == (Image *) NULL) 4124fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"NoSuchImage",option,arg1); 412543f425dd7d5b33887726982b28ebfa06f5560636anthony InsertImageInList(&index_image,insert_image); 412643f425dd7d5b33887726982b28ebfa06f5560636anthony } 412792c93bd35e207736d340f1b32000006a5bf6208eanthony _images=GetFirstImageInList(index_image); 4128805a2d48e7e2ed7d699871183ed706699119281canthony break; 4129805a2d48e7e2ed7d699871183ed706699119281canthony } 4130ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4131805a2d48e7e2ed7d699871183ed706699119281canthony } 4132805a2d48e7e2ed7d699871183ed706699119281canthony case 'l': 4133805a2d48e7e2ed7d699871183ed706699119281canthony { 4134afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("layers",option+1) == 0) 4135805a2d48e7e2ed7d699871183ed706699119281canthony { 4136fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony parse=ParseCommandOption(MagickLayerOptions,MagickFalse,arg1); 4137fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony if ( parse < 0 ) 4138fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony CLIWandExceptArgBreak(OptionError,"UnrecognizedLayerMethod", 4139fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony option,arg1); 4140a041706d555a780038f97211101cf8acb7f297d2cristy switch ((LayerMethod) parse) 4141805a2d48e7e2ed7d699871183ed706699119281canthony { 4142805a2d48e7e2ed7d699871183ed706699119281canthony case CoalesceLayer: 4143805a2d48e7e2ed7d699871183ed706699119281canthony { 414492c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=CoalesceImages(_images,_exception); 4145805a2d48e7e2ed7d699871183ed706699119281canthony break; 4146805a2d48e7e2ed7d699871183ed706699119281canthony } 4147805a2d48e7e2ed7d699871183ed706699119281canthony case CompareAnyLayer: 4148805a2d48e7e2ed7d699871183ed706699119281canthony case CompareClearLayer: 4149805a2d48e7e2ed7d699871183ed706699119281canthony case CompareOverlayLayer: 4150805a2d48e7e2ed7d699871183ed706699119281canthony default: 4151805a2d48e7e2ed7d699871183ed706699119281canthony { 4152a041706d555a780038f97211101cf8acb7f297d2cristy new_images=CompareImagesLayers(_images,(LayerMethod) parse, 4153fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony _exception); 4154805a2d48e7e2ed7d699871183ed706699119281canthony break; 4155805a2d48e7e2ed7d699871183ed706699119281canthony } 4156805a2d48e7e2ed7d699871183ed706699119281canthony case MergeLayer: 4157805a2d48e7e2ed7d699871183ed706699119281canthony case FlattenLayer: 4158805a2d48e7e2ed7d699871183ed706699119281canthony case MosaicLayer: 4159805a2d48e7e2ed7d699871183ed706699119281canthony case TrimBoundsLayer: 4160805a2d48e7e2ed7d699871183ed706699119281canthony { 4161a041706d555a780038f97211101cf8acb7f297d2cristy new_images=MergeImageLayers(_images,(LayerMethod) parse, 4162f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy _exception); 4163805a2d48e7e2ed7d699871183ed706699119281canthony break; 4164805a2d48e7e2ed7d699871183ed706699119281canthony } 4165805a2d48e7e2ed7d699871183ed706699119281canthony case DisposeLayer: 4166805a2d48e7e2ed7d699871183ed706699119281canthony { 416792c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=DisposeImages(_images,_exception); 4168805a2d48e7e2ed7d699871183ed706699119281canthony break; 4169805a2d48e7e2ed7d699871183ed706699119281canthony } 4170805a2d48e7e2ed7d699871183ed706699119281canthony case OptimizeImageLayer: 4171805a2d48e7e2ed7d699871183ed706699119281canthony { 417292c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=OptimizeImageLayers(_images,_exception); 4173805a2d48e7e2ed7d699871183ed706699119281canthony break; 4174805a2d48e7e2ed7d699871183ed706699119281canthony } 4175805a2d48e7e2ed7d699871183ed706699119281canthony case OptimizePlusLayer: 4176805a2d48e7e2ed7d699871183ed706699119281canthony { 417792c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=OptimizePlusImageLayers(_images,_exception); 4178805a2d48e7e2ed7d699871183ed706699119281canthony break; 4179805a2d48e7e2ed7d699871183ed706699119281canthony } 4180805a2d48e7e2ed7d699871183ed706699119281canthony case OptimizeTransLayer: 4181805a2d48e7e2ed7d699871183ed706699119281canthony { 418292c93bd35e207736d340f1b32000006a5bf6208eanthony OptimizeImageTransparency(_images,_exception); 4183805a2d48e7e2ed7d699871183ed706699119281canthony break; 4184805a2d48e7e2ed7d699871183ed706699119281canthony } 4185805a2d48e7e2ed7d699871183ed706699119281canthony case RemoveDupsLayer: 4186805a2d48e7e2ed7d699871183ed706699119281canthony { 418792c93bd35e207736d340f1b32000006a5bf6208eanthony RemoveDuplicateLayers(&_images,_exception); 4188805a2d48e7e2ed7d699871183ed706699119281canthony break; 4189805a2d48e7e2ed7d699871183ed706699119281canthony } 4190805a2d48e7e2ed7d699871183ed706699119281canthony case RemoveZeroLayer: 4191805a2d48e7e2ed7d699871183ed706699119281canthony { 419292c93bd35e207736d340f1b32000006a5bf6208eanthony RemoveZeroDelayLayers(&_images,_exception); 4193805a2d48e7e2ed7d699871183ed706699119281canthony break; 4194805a2d48e7e2ed7d699871183ed706699119281canthony } 4195805a2d48e7e2ed7d699871183ed706699119281canthony case OptimizeLayer: 419631f1bf7bb6ee2698a2afab42ee0329b11663636canthony { /* General Purpose, GIF Animation Optimizer. */ 419792c93bd35e207736d340f1b32000006a5bf6208eanthony new_images=CoalesceImages(_images,_exception); 419831f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (new_images == (Image *) NULL) 419931f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 420092c93bd35e207736d340f1b32000006a5bf6208eanthony _images=DestroyImageList(_images); 420192c93bd35e207736d340f1b32000006a5bf6208eanthony _images=OptimizeImageLayers(new_images,_exception); 420292c93bd35e207736d340f1b32000006a5bf6208eanthony if (_images == (Image *) NULL) 420331f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 420431f1bf7bb6ee2698a2afab42ee0329b11663636canthony new_images=DestroyImageList(new_images); 420592c93bd35e207736d340f1b32000006a5bf6208eanthony OptimizeImageTransparency(_images,_exception); 420692c93bd35e207736d340f1b32000006a5bf6208eanthony (void) RemapImages(_quantize_info,_images,(Image *) NULL, 420792c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 4208805a2d48e7e2ed7d699871183ed706699119281canthony break; 4209805a2d48e7e2ed7d699871183ed706699119281canthony } 4210805a2d48e7e2ed7d699871183ed706699119281canthony case CompositeLayer: 4211805a2d48e7e2ed7d699871183ed706699119281canthony { 4212805a2d48e7e2ed7d699871183ed706699119281canthony Image 4213805a2d48e7e2ed7d699871183ed706699119281canthony *source; 4214805a2d48e7e2ed7d699871183ed706699119281canthony 4215805a2d48e7e2ed7d699871183ed706699119281canthony RectangleInfo 4216805a2d48e7e2ed7d699871183ed706699119281canthony geometry; 4217805a2d48e7e2ed7d699871183ed706699119281canthony 421831f1bf7bb6ee2698a2afab42ee0329b11663636canthony CompositeOperator 42195f867ae6899e46eb35c30b38e9479312880608cfanthony compose; 42205f867ae6899e46eb35c30b38e9479312880608cfanthony 42215f867ae6899e46eb35c30b38e9479312880608cfanthony const char* 42225f867ae6899e46eb35c30b38e9479312880608cfanthony value; 42235f867ae6899e46eb35c30b38e9479312880608cfanthony 422492c93bd35e207736d340f1b32000006a5bf6208eanthony value=GetImageOption(_image_info,"compose"); 422531f1bf7bb6ee2698a2afab42ee0329b11663636canthony compose=OverCompositeOp; /* Default to Over */ 42265f867ae6899e46eb35c30b38e9479312880608cfanthony if (value != (const char *) NULL) 42275f867ae6899e46eb35c30b38e9479312880608cfanthony compose=(CompositeOperator) ParseCommandOption( 42285f867ae6899e46eb35c30b38e9479312880608cfanthony MagickComposeOptions,MagickFalse,value); 42295f867ae6899e46eb35c30b38e9479312880608cfanthony 423031f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* Split image sequence at the first 'NULL:' image. */ 423192c93bd35e207736d340f1b32000006a5bf6208eanthony source=_images; 4232805a2d48e7e2ed7d699871183ed706699119281canthony while (source != (Image *) NULL) 4233805a2d48e7e2ed7d699871183ed706699119281canthony { 4234805a2d48e7e2ed7d699871183ed706699119281canthony source=GetNextImageInList(source); 4235805a2d48e7e2ed7d699871183ed706699119281canthony if ((source != (Image *) NULL) && 4236805a2d48e7e2ed7d699871183ed706699119281canthony (LocaleCompare(source->magick,"NULL") == 0)) 4237805a2d48e7e2ed7d699871183ed706699119281canthony break; 4238805a2d48e7e2ed7d699871183ed706699119281canthony } 4239805a2d48e7e2ed7d699871183ed706699119281canthony if (source != (Image *) NULL) 4240805a2d48e7e2ed7d699871183ed706699119281canthony { 4241805a2d48e7e2ed7d699871183ed706699119281canthony if ((GetPreviousImageInList(source) == (Image *) NULL) || 4242805a2d48e7e2ed7d699871183ed706699119281canthony (GetNextImageInList(source) == (Image *) NULL)) 4243805a2d48e7e2ed7d699871183ed706699119281canthony source=(Image *) NULL; 4244805a2d48e7e2ed7d699871183ed706699119281canthony else 424531f1bf7bb6ee2698a2afab42ee0329b11663636canthony { /* Separate the two lists, junk the null: image. */ 4246805a2d48e7e2ed7d699871183ed706699119281canthony source=SplitImageList(source->previous); 4247805a2d48e7e2ed7d699871183ed706699119281canthony DeleteImageFromList(&source); 4248805a2d48e7e2ed7d699871183ed706699119281canthony } 4249805a2d48e7e2ed7d699871183ed706699119281canthony } 4250805a2d48e7e2ed7d699871183ed706699119281canthony if (source == (Image *) NULL) 4251805a2d48e7e2ed7d699871183ed706699119281canthony { 425292c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ThrowMagickException(_exception,GetMagickModule(), 4253805a2d48e7e2ed7d699871183ed706699119281canthony OptionError,"MissingNullSeparator","layers Composite"); 4254805a2d48e7e2ed7d699871183ed706699119281canthony break; 4255805a2d48e7e2ed7d699871183ed706699119281canthony } 425631f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* Adjust offset with gravity and virtual canvas. */ 425792c93bd35e207736d340f1b32000006a5bf6208eanthony SetGeometry(_images,&geometry); 425892c93bd35e207736d340f1b32000006a5bf6208eanthony (void) ParseAbsoluteGeometry(_images->geometry,&geometry); 4259805a2d48e7e2ed7d699871183ed706699119281canthony geometry.width=source->page.width != 0 ? 4260805a2d48e7e2ed7d699871183ed706699119281canthony source->page.width : source->columns; 4261805a2d48e7e2ed7d699871183ed706699119281canthony geometry.height=source->page.height != 0 ? 4262805a2d48e7e2ed7d699871183ed706699119281canthony source->page.height : source->rows; 426392c93bd35e207736d340f1b32000006a5bf6208eanthony GravityAdjustGeometry(_images->page.width != 0 ? 426492c93bd35e207736d340f1b32000006a5bf6208eanthony _images->page.width : _images->columns, 426592c93bd35e207736d340f1b32000006a5bf6208eanthony _images->page.height != 0 ? _images->page.height : 426692c93bd35e207736d340f1b32000006a5bf6208eanthony _images->rows,_images->gravity,&geometry); 42675f867ae6899e46eb35c30b38e9479312880608cfanthony 426831f1bf7bb6ee2698a2afab42ee0329b11663636canthony /* Compose the two image sequences together */ 426992c93bd35e207736d340f1b32000006a5bf6208eanthony CompositeLayers(_images,compose,source,geometry.x,geometry.y, 427092c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 4271805a2d48e7e2ed7d699871183ed706699119281canthony source=DestroyImageList(source); 4272805a2d48e7e2ed7d699871183ed706699119281canthony break; 4273805a2d48e7e2ed7d699871183ed706699119281canthony } 4274805a2d48e7e2ed7d699871183ed706699119281canthony } 4275805a2d48e7e2ed7d699871183ed706699119281canthony break; 4276805a2d48e7e2ed7d699871183ed706699119281canthony } 4277ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4278805a2d48e7e2ed7d699871183ed706699119281canthony } 4279805a2d48e7e2ed7d699871183ed706699119281canthony case 'm': 4280805a2d48e7e2ed7d699871183ed706699119281canthony { 4281afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("map",option+1) == 0) 4282805a2d48e7e2ed7d699871183ed706699119281canthony { 4283464f1c476517436723780b8a8bb371464584453canthony CLIWandWarnReplaced("+remap"); 428492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) RemapImages(_quantize_info,_images,(Image *) NULL,_exception); 4285805a2d48e7e2ed7d699871183ed706699119281canthony break; 4286805a2d48e7e2ed7d699871183ed706699119281canthony } 4287e863c054d49031af35b73066f5394af223de7df5cristy if (LocaleCompare("metric",option+1) == 0) 4288e863c054d49031af35b73066f5394af223de7df5cristy break; 4289afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("morph",option+1) == 0) 4290805a2d48e7e2ed7d699871183ed706699119281canthony { 4291805a2d48e7e2ed7d699871183ed706699119281canthony Image 4292805a2d48e7e2ed7d699871183ed706699119281canthony *morph_image; 4293805a2d48e7e2ed7d699871183ed706699119281canthony 42945d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 42957bc87995f5fcb67d01e8cad3e80b0024b42e942danthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 429692c93bd35e207736d340f1b32000006a5bf6208eanthony morph_image=MorphImages(_images,StringToUnsignedLong(arg1), 429792c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 4298805a2d48e7e2ed7d699871183ed706699119281canthony if (morph_image == (Image *) NULL) 429931f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 430092c93bd35e207736d340f1b32000006a5bf6208eanthony _images=DestroyImageList(_images); 430192c93bd35e207736d340f1b32000006a5bf6208eanthony _images=morph_image; 4302805a2d48e7e2ed7d699871183ed706699119281canthony break; 4303805a2d48e7e2ed7d699871183ed706699119281canthony } 4304afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("mosaic",option+1) == 0) 4305805a2d48e7e2ed7d699871183ed706699119281canthony { 4306319dac6e2a04826b9cc8d2784549c08fd34f8879anthony /* REDIRECTED to use -layers mosaic instead */ 430752b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLIListOperatorImages(cli_wand,"-layers",option+1,NULL); 4308805a2d48e7e2ed7d699871183ed706699119281canthony break; 4309805a2d48e7e2ed7d699871183ed706699119281canthony } 4310ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4311805a2d48e7e2ed7d699871183ed706699119281canthony } 4312805a2d48e7e2ed7d699871183ed706699119281canthony case 'p': 4313805a2d48e7e2ed7d699871183ed706699119281canthony { 431402016cff038d0ddb255d4c84bf31a78f5c8714f0cristy if (LocaleCompare("poly",option+1) == 0) 431502016cff038d0ddb255d4c84bf31a78f5c8714f0cristy { 431602016cff038d0ddb255d4c84bf31a78f5c8714f0cristy double 431702016cff038d0ddb255d4c84bf31a78f5c8714f0cristy *args; 431802016cff038d0ddb255d4c84bf31a78f5c8714f0cristy 431902016cff038d0ddb255d4c84bf31a78f5c8714f0cristy ssize_t 432002016cff038d0ddb255d4c84bf31a78f5c8714f0cristy count; 432102016cff038d0ddb255d4c84bf31a78f5c8714f0cristy 432202016cff038d0ddb255d4c84bf31a78f5c8714f0cristy /* convert argument string into an array of doubles */ 4323ace09c64ece039e3fe5e952ca36a00ed07ee09d0cristy args = StringToArrayOfDoubles(arg1,&count,_exception); 4324f432c635c526259b858c9aad3d409c5c44545686cristy if (args == (double *) NULL ) 4325ace09c64ece039e3fe5e952ca36a00ed07ee09d0cristy CLIWandExceptArgBreak(OptionError,"InvalidNumberList",option,arg1); 4326f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy new_images=PolynomialImage(_images,(size_t) (count >> 1),args, 4327f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy _exception); 432802016cff038d0ddb255d4c84bf31a78f5c8714f0cristy args=(double *) RelinquishMagickMemory(args); 432902016cff038d0ddb255d4c84bf31a78f5c8714f0cristy break; 433002016cff038d0ddb255d4c84bf31a78f5c8714f0cristy } 4331afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("process",option+1) == 0) 4332805a2d48e7e2ed7d699871183ed706699119281canthony { 4333b1d483a6a6a5678173db9d60bec52dd5a37826beanthony /* FUTURE: better parsing using ScriptToken() from string ??? */ 4334805a2d48e7e2ed7d699871183ed706699119281canthony char 4335805a2d48e7e2ed7d699871183ed706699119281canthony **arguments; 4336805a2d48e7e2ed7d699871183ed706699119281canthony 4337805a2d48e7e2ed7d699871183ed706699119281canthony int 4338805a2d48e7e2ed7d699871183ed706699119281canthony j, 4339805a2d48e7e2ed7d699871183ed706699119281canthony number_arguments; 4340805a2d48e7e2ed7d699871183ed706699119281canthony 434131f1bf7bb6ee2698a2afab42ee0329b11663636canthony arguments=StringToArgv(arg1,&number_arguments); 4342805a2d48e7e2ed7d699871183ed706699119281canthony if (arguments == (char **) NULL) 4343805a2d48e7e2ed7d699871183ed706699119281canthony break; 434431f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (strchr(arguments[1],'=') != (char *) NULL) 4345805a2d48e7e2ed7d699871183ed706699119281canthony { 4346805a2d48e7e2ed7d699871183ed706699119281canthony char 4347805a2d48e7e2ed7d699871183ed706699119281canthony breaker, 4348805a2d48e7e2ed7d699871183ed706699119281canthony quote, 4349805a2d48e7e2ed7d699871183ed706699119281canthony *token; 4350805a2d48e7e2ed7d699871183ed706699119281canthony 4351805a2d48e7e2ed7d699871183ed706699119281canthony const char 4352805a2d48e7e2ed7d699871183ed706699119281canthony *arguments; 4353805a2d48e7e2ed7d699871183ed706699119281canthony 4354805a2d48e7e2ed7d699871183ed706699119281canthony int 4355805a2d48e7e2ed7d699871183ed706699119281canthony next, 4356805a2d48e7e2ed7d699871183ed706699119281canthony status; 4357805a2d48e7e2ed7d699871183ed706699119281canthony 4358805a2d48e7e2ed7d699871183ed706699119281canthony size_t 4359805a2d48e7e2ed7d699871183ed706699119281canthony length; 4360805a2d48e7e2ed7d699871183ed706699119281canthony 4361805a2d48e7e2ed7d699871183ed706699119281canthony TokenInfo 4362805a2d48e7e2ed7d699871183ed706699119281canthony *token_info; 4363805a2d48e7e2ed7d699871183ed706699119281canthony 4364805a2d48e7e2ed7d699871183ed706699119281canthony /* 436524aa882bb8f0a8555253f77fc9ad8cb12fcb8c05anthony Support old style syntax, filter="-option arg1". 4366805a2d48e7e2ed7d699871183ed706699119281canthony */ 43674bc3dac42df4f402771274acb9796693b846eb8ecristy assert(arg1 != (const char *) NULL); 436831f1bf7bb6ee2698a2afab42ee0329b11663636canthony length=strlen(arg1); 4369805a2d48e7e2ed7d699871183ed706699119281canthony token=(char *) NULL; 4370151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy if (~length >= (MagickPathExtent-1)) 4371151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy token=(char *) AcquireQuantumMemory(length+MagickPathExtent, 4372805a2d48e7e2ed7d699871183ed706699119281canthony sizeof(*token)); 4373805a2d48e7e2ed7d699871183ed706699119281canthony if (token == (char *) NULL) 4374805a2d48e7e2ed7d699871183ed706699119281canthony break; 4375805a2d48e7e2ed7d699871183ed706699119281canthony next=0; 437631f1bf7bb6ee2698a2afab42ee0329b11663636canthony arguments=arg1; 4377805a2d48e7e2ed7d699871183ed706699119281canthony token_info=AcquireTokenInfo(); 4378805a2d48e7e2ed7d699871183ed706699119281canthony status=Tokenizer(token_info,0,token,length,arguments,"","=", 4379805a2d48e7e2ed7d699871183ed706699119281canthony "\"",'\0',&breaker,&next,"e); 4380805a2d48e7e2ed7d699871183ed706699119281canthony token_info=DestroyTokenInfo(token_info); 4381805a2d48e7e2ed7d699871183ed706699119281canthony if (status == 0) 4382805a2d48e7e2ed7d699871183ed706699119281canthony { 4383805a2d48e7e2ed7d699871183ed706699119281canthony const char 4384805a2d48e7e2ed7d699871183ed706699119281canthony *argv; 4385805a2d48e7e2ed7d699871183ed706699119281canthony 4386805a2d48e7e2ed7d699871183ed706699119281canthony argv=(&(arguments[next])); 438792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) InvokeDynamicImageFilter(token,&_images,1,&argv, 438892c93bd35e207736d340f1b32000006a5bf6208eanthony _exception); 4389805a2d48e7e2ed7d699871183ed706699119281canthony } 4390805a2d48e7e2ed7d699871183ed706699119281canthony token=DestroyString(token); 4391805a2d48e7e2ed7d699871183ed706699119281canthony break; 4392805a2d48e7e2ed7d699871183ed706699119281canthony } 4393805a2d48e7e2ed7d699871183ed706699119281canthony (void) SubstituteString(&arguments[1],"-",""); 439492c93bd35e207736d340f1b32000006a5bf6208eanthony (void) InvokeDynamicImageFilter(arguments[1],&_images, 439592c93bd35e207736d340f1b32000006a5bf6208eanthony number_arguments-2,(const char **) arguments+2,_exception); 4396805a2d48e7e2ed7d699871183ed706699119281canthony for (j=0; j < number_arguments; j++) 4397805a2d48e7e2ed7d699871183ed706699119281canthony arguments[j]=DestroyString(arguments[j]); 4398805a2d48e7e2ed7d699871183ed706699119281canthony arguments=(char **) RelinquishMagickMemory(arguments); 4399805a2d48e7e2ed7d699871183ed706699119281canthony break; 4400805a2d48e7e2ed7d699871183ed706699119281canthony } 4401ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4402805a2d48e7e2ed7d699871183ed706699119281canthony } 4403805a2d48e7e2ed7d699871183ed706699119281canthony case 'r': 4404805a2d48e7e2ed7d699871183ed706699119281canthony { 4405afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("remap",option+1) == 0) 440631f1bf7bb6ee2698a2afab42ee0329b11663636canthony { 440792c93bd35e207736d340f1b32000006a5bf6208eanthony (void) RemapImages(_quantize_info,_images,(Image *) NULL,_exception); 440831f1bf7bb6ee2698a2afab42ee0329b11663636canthony break; 440931f1bf7bb6ee2698a2afab42ee0329b11663636canthony } 4410afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("reverse",option+1) == 0) 4411805a2d48e7e2ed7d699871183ed706699119281canthony { 441292c93bd35e207736d340f1b32000006a5bf6208eanthony ReverseImageList(&_images); 4413805a2d48e7e2ed7d699871183ed706699119281canthony break; 4414805a2d48e7e2ed7d699871183ed706699119281canthony } 4415ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4416805a2d48e7e2ed7d699871183ed706699119281canthony } 4417805a2d48e7e2ed7d699871183ed706699119281canthony case 's': 4418805a2d48e7e2ed7d699871183ed706699119281canthony { 4419afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony if (LocaleCompare("smush",option+1) == 0) 4420805a2d48e7e2ed7d699871183ed706699119281canthony { 4421cd358fcc24e0be863b1d6e1917e799fc04add92aanthony /* FUTURE: this option needs more work to make better */ 4422805a2d48e7e2ed7d699871183ed706699119281canthony ssize_t 4423805a2d48e7e2ed7d699871183ed706699119281canthony offset; 4424805a2d48e7e2ed7d699871183ed706699119281canthony 44255d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsGeometry(arg1) == MagickFalse) 4426f42014dc55e8d21355ea3d17372e2d9c14b07641anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 442731f1bf7bb6ee2698a2afab42ee0329b11663636canthony offset=(ssize_t) StringToLong(arg1); 4428a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony new_images=SmushImages(_images,IsNormalOp,offset,_exception); 4429cd358fcc24e0be863b1d6e1917e799fc04add92aanthony break; 4430cd358fcc24e0be863b1d6e1917e799fc04add92aanthony } 4431cd358fcc24e0be863b1d6e1917e799fc04add92aanthony if (LocaleCompare("subimage",option+1) == 0) 4432cd358fcc24e0be863b1d6e1917e799fc04add92aanthony { 4433cd358fcc24e0be863b1d6e1917e799fc04add92aanthony Image 4434cd358fcc24e0be863b1d6e1917e799fc04add92aanthony *base_image, 4435cd358fcc24e0be863b1d6e1917e799fc04add92aanthony *compare_image; 4436cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4437f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy const char 4438f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy *value; 4439cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4440cd358fcc24e0be863b1d6e1917e799fc04add92aanthony MetricType 4441cd358fcc24e0be863b1d6e1917e799fc04add92aanthony metric; 4442cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4443cd358fcc24e0be863b1d6e1917e799fc04add92aanthony double 4444cd358fcc24e0be863b1d6e1917e799fc04add92aanthony similarity; 4445cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4446cd358fcc24e0be863b1d6e1917e799fc04add92aanthony RectangleInfo 4447cd358fcc24e0be863b1d6e1917e799fc04add92aanthony offset; 4448cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4449cd358fcc24e0be863b1d6e1917e799fc04add92aanthony base_image=GetImageFromList(_images,0); 4450cd358fcc24e0be863b1d6e1917e799fc04add92aanthony compare_image=GetImageFromList(_images,1); 4451cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4452cd358fcc24e0be863b1d6e1917e799fc04add92aanthony /* Comparision Metric */ 44530816329f81f807d0a99a4d3301d3ddaa842308d3cristy metric=UndefinedErrorMetric; 4454cd358fcc24e0be863b1d6e1917e799fc04add92aanthony value=GetImageOption(_image_info,"metric"); 4455cd358fcc24e0be863b1d6e1917e799fc04add92aanthony if (value != (const char *) NULL) 4456cd358fcc24e0be863b1d6e1917e799fc04add92aanthony metric=(MetricType) ParseCommandOption(MagickMetricOptions, 4457cd358fcc24e0be863b1d6e1917e799fc04add92aanthony MagickFalse,value); 4458cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 445999fcec42b1b4c5b95bdeaa3fd38810cc05e62d56cristy new_images=SimilarityImage(base_image,compare_image,metric,0.0, 4460f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy &offset,&similarity,_exception); 4461cd358fcc24e0be863b1d6e1917e799fc04add92aanthony 4462e024637ce65f11ae6e83bfc913b601c26ba6b350cristy if (new_images != (Image *) NULL) 4463e024637ce65f11ae6e83bfc913b601c26ba6b350cristy { 4464e024637ce65f11ae6e83bfc913b601c26ba6b350cristy char 4465e024637ce65f11ae6e83bfc913b601c26ba6b350cristy result[MagickPathExtent]; 4466e024637ce65f11ae6e83bfc913b601c26ba6b350cristy 4467e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) FormatLocaleString(result,MagickPathExtent,"%lf", 4468e024637ce65f11ae6e83bfc913b601c26ba6b350cristy similarity); 4469e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) SetImageProperty(new_images,"subimage:similarity",result, 4470e024637ce65f11ae6e83bfc913b601c26ba6b350cristy _exception); 4471e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) FormatLocaleString(result,MagickPathExtent,"%+ld",(long) 4472e024637ce65f11ae6e83bfc913b601c26ba6b350cristy offset.x); 4473e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) SetImageProperty(new_images,"subimage:x",result, 4474e024637ce65f11ae6e83bfc913b601c26ba6b350cristy _exception); 4475e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) FormatLocaleString(result,MagickPathExtent,"%+ld",(long) 4476e024637ce65f11ae6e83bfc913b601c26ba6b350cristy offset.y); 4477e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) SetImageProperty(new_images,"subimage:y",result, 4478e024637ce65f11ae6e83bfc913b601c26ba6b350cristy _exception); 4479e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) FormatLocaleString(result,MagickPathExtent, 4480e024637ce65f11ae6e83bfc913b601c26ba6b350cristy "%lux%lu%+ld%+ld",(unsigned long) offset.width,(unsigned long) 4481e024637ce65f11ae6e83bfc913b601c26ba6b350cristy offset.height,(long) offset.x,(long) offset.y); 4482e024637ce65f11ae6e83bfc913b601c26ba6b350cristy (void) SetImageProperty(new_images,"subimage:offset",result, 4483e024637ce65f11ae6e83bfc913b601c26ba6b350cristy _exception); 4484e024637ce65f11ae6e83bfc913b601c26ba6b350cristy } 4485805a2d48e7e2ed7d699871183ed706699119281canthony break; 4486805a2d48e7e2ed7d699871183ed706699119281canthony } 4487f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy if (LocaleCompare("swap",option+1) == 0) 4488f68c0bed00b46fa403fb0a94636d611dcd9a3a22cristy { 44890ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony Image 44900ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony *p, 44910ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony *q, 44920ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony *swap; 44930ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony 44940ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony ssize_t 44950ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony index, 44960ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony swap_index; 44970ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony 44986b36c94b6d683f492e222de0349ff3ab0aa858c0cristy index=(-1); 44996b36c94b6d683f492e222de0349ff3ab0aa858c0cristy swap_index=(-2); 45000ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony if (IfNormalOp) { 45010ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony GeometryInfo 45020ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony geometry_info; 4503805a2d48e7e2ed7d699871183ed706699119281canthony 45040ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony MagickStatusType 45050ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony flags; 4506805a2d48e7e2ed7d699871183ed706699119281canthony 45070ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony swap_index=(-1); 45080ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony flags=ParseGeometry(arg1,&geometry_info); 450990fbd1c3be638e851691dd9789d70b8a0acaf0d9cristy if ((flags & RhoValue) == 0) 4510b1e21ed484f85de934d438df678d9d8ca3b4c7b5anthony CLIWandExceptArgBreak(OptionError,"InvalidArgument",option,arg1); 45110ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony index=(ssize_t) geometry_info.rho; 45120ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony if ((flags & SigmaValue) != 0) 45130ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony swap_index=(ssize_t) geometry_info.sigma; 45140ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony } 45150ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony p=GetImageFromList(_images,index); 45160ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony q=GetImageFromList(_images,swap_index); 45178226e729aec80913941e8aa6b197e3efd03dfb43anthony if ((p == (Image *) NULL) || (q == (Image *) NULL)) { 45188226e729aec80913941e8aa6b197e3efd03dfb43anthony if (IfNormalOp) 45198226e729aec80913941e8aa6b197e3efd03dfb43anthony CLIWandExceptArgBreak(OptionError,"InvalidImageIndex",option,arg1) 45208226e729aec80913941e8aa6b197e3efd03dfb43anthony else 45218226e729aec80913941e8aa6b197e3efd03dfb43anthony CLIWandExceptionBreak(OptionError,"TwoOrMoreImagesRequired",option); 45228226e729aec80913941e8aa6b197e3efd03dfb43anthony } 45230ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony if (p == q) 45248226e729aec80913941e8aa6b197e3efd03dfb43anthony CLIWandExceptArgBreak(OptionError,"InvalidImageIndex",option,arg1); 45250ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony swap=CloneImage(p,0,0,MagickTrue,_exception); 45260ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony ReplaceImageInList(&p,CloneImage(q,0,0,MagickTrue,_exception)); 45270ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony ReplaceImageInList(&q,swap); 45280ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony _images=GetFirstImageInList(q); 45290ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony break; 45300ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony } 4531ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4532805a2d48e7e2ed7d699871183ed706699119281canthony } 4533805a2d48e7e2ed7d699871183ed706699119281canthony default: 4534ebb73a29ea4b41292eeb11a8e373bb060a81bde2anthony CLIWandExceptionBreak(OptionError,"UnrecognizedOption",option); 4535805a2d48e7e2ed7d699871183ed706699119281canthony } 4536964d28ed4391c639c60c392807c9dfb09f933ba8anthony 4537964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* clean up percent escape interpreted strings */ 4538964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg1 != arg1n ) 4539964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=DestroyString((char *)arg1); 4540964d28ed4391c639c60c392807c9dfb09f933ba8anthony if (arg2 != arg2n ) 4541964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=DestroyString((char *)arg2); 4542964d28ed4391c639c60c392807c9dfb09f933ba8anthony 4543964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* if new image list generated, replace existing image list */ 454431f1bf7bb6ee2698a2afab42ee0329b11663636canthony if (new_images == (Image *) NULL) 45456398ec777e91813b64767e25358b7062a7de56cbcristy return(status == 0 ? MagickFalse : MagickTrue); 4546964d28ed4391c639c60c392807c9dfb09f933ba8anthony _images=DestroyImageList(_images); 454792c93bd35e207736d340f1b32000006a5bf6208eanthony _images=GetFirstImageInList(new_images); 45486398ec777e91813b64767e25358b7062a7de56cbcristy return(status == 0 ? MagickFalse : MagickTrue); 4549805a2d48e7e2ed7d699871183ed706699119281canthony 455092c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _image_info 455192c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _images 455292c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception 455392c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _draw_info 455492c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _quantize_info 4555afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfNormalOp 4556afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony#undef IfPlusOp 4557a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#undef IsNormalOp 455843f425dd7d5b33887726982b28ebfa06f5560636anthony} 455943f425dd7d5b33887726982b28ebfa06f5560636anthony 456043f425dd7d5b33887726982b28ebfa06f5560636anthony/* 456143f425dd7d5b33887726982b28ebfa06f5560636anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 456243f425dd7d5b33887726982b28ebfa06f5560636anthony% % 456343f425dd7d5b33887726982b28ebfa06f5560636anthony% % 456443f425dd7d5b33887726982b28ebfa06f5560636anthony% % 4565964d28ed4391c639c60c392807c9dfb09f933ba8anthony+ C L I N o I m a g e O p e r a t i o n s % 456643f425dd7d5b33887726982b28ebfa06f5560636anthony% % 456743f425dd7d5b33887726982b28ebfa06f5560636anthony% % 456843f425dd7d5b33887726982b28ebfa06f5560636anthony% % 456943f425dd7d5b33887726982b28ebfa06f5560636anthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 457043f425dd7d5b33887726982b28ebfa06f5560636anthony% 4571464f1c476517436723780b8a8bb371464584453canthony% CLINoImageOperator() Applies operations that may not actually need images 4572964d28ed4391c639c60c392807c9dfb09f933ba8anthony% in an image list. 457343f425dd7d5b33887726982b28ebfa06f5560636anthony% 45744837ac2f5e9dbb766129a91aa11cf7c547477119anthony% The classic operators of this type is "-read", which actually creates 45754837ac2f5e9dbb766129a91aa11cf7c547477119anthony% images even when no images are present. Or image stack operators, which 45764837ac2f5e9dbb766129a91aa11cf7c547477119anthony% can be applied (push or pop) to an empty image list. 4577afa3dfccf9f0ded9a96e7cc8afb47687595a8decanthony% 45784837ac2f5e9dbb766129a91aa11cf7c547477119anthony% Note that these operators may involve other special 'option' prefix 45794837ac2f5e9dbb766129a91aa11cf7c547477119anthony% characters other than '-' or '+', namely parenthesis and braces. 458043f425dd7d5b33887726982b28ebfa06f5560636anthony% 4581464f1c476517436723780b8a8bb371464584453canthony% The format of the CLINoImageOption method is: 458243f425dd7d5b33887726982b28ebfa06f5560636anthony% 4583464f1c476517436723780b8a8bb371464584453canthony% void CLINoImageOption(MagickCLI *cli_wand,const char *option, 4584464f1c476517436723780b8a8bb371464584453canthony% const char *arg1, const char *arg2) 458543f425dd7d5b33887726982b28ebfa06f5560636anthony% 458643f425dd7d5b33887726982b28ebfa06f5560636anthony% A description of each parameter follows: 458743f425dd7d5b33887726982b28ebfa06f5560636anthony% 4588c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony% o cli_wand: the main CLI Wand to use. (sometimes not required) 458943f425dd7d5b33887726982b28ebfa06f5560636anthony% 459043f425dd7d5b33887726982b28ebfa06f5560636anthony% o option: The special option (with any switch char) to process 459143f425dd7d5b33887726982b28ebfa06f5560636anthony% 4592464f1c476517436723780b8a8bb371464584453canthony% o arg1 & arg2: Argument for option, if required 4593464f1c476517436723780b8a8bb371464584453canthony% Currently arg2 is not used. 459443f425dd7d5b33887726982b28ebfa06f5560636anthony% 459543f425dd7d5b33887726982b28ebfa06f5560636anthony*/ 4596fe83185ff915c87796df33a8d90a1e0937b3d76fcristyWandPrivate void CLINoImageOperator(MagickCLI *cli_wand, 4597a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char *option,const char *arg1n,const char *arg2n) 459843f425dd7d5b33887726982b28ebfa06f5560636anthony{ 4599a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char /* percent escaped versions of the args */ 46004837ac2f5e9dbb766129a91aa11cf7c547477119anthony *arg1, 46014837ac2f5e9dbb766129a91aa11cf7c547477119anthony *arg2; 46024837ac2f5e9dbb766129a91aa11cf7c547477119anthony 46038226e729aec80913941e8aa6b197e3efd03dfb43anthony#define _image_info (cli_wand->wand.image_info) 46048226e729aec80913941e8aa6b197e3efd03dfb43anthony#define _images (cli_wand->wand.images) 46058226e729aec80913941e8aa6b197e3efd03dfb43anthony#define _exception (cli_wand->wand.exception) 4606a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _process_flags (cli_wand->process_flags) 4607a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony#define _option_type ((CommandOptionFlags) cli_wand->command->flags) 46088226e729aec80913941e8aa6b197e3efd03dfb43anthony#define IfNormalOp (*option=='-') 46098226e729aec80913941e8aa6b197e3efd03dfb43anthony#define IfPlusOp (*option!='-') 461043f425dd7d5b33887726982b28ebfa06f5560636anthony 461143f425dd7d5b33887726982b28ebfa06f5560636anthony assert(cli_wand != (MagickCLI *) NULL); 4612e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->signature == MagickWandSignature); 4613e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->wand.signature == MagickWandSignature); 461443f425dd7d5b33887726982b28ebfa06f5560636anthony 4615d0792939dc18eff319129903f2627bd882a574aadirk if (cli_wand->wand.debug != MagickFalse) 4616a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) CLILogEvent(cli_wand,CommandEvent,GetMagickModule(), 4617e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy "- NoImage Operator: %s \"%s\" \"%s\"", option, 4618e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy arg1n != (char *) NULL ? arg1n : "", 4619e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy arg2n != (char *) NULL ? arg2n : ""); 46200ea037a49d6f7f926e2cabb90c1ebcbf6b1c39bfanthony 46214837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg1 = arg1n; 46224837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg2 = arg2n; 4623a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 4624a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* Interpret Percent Escapes in Arguments - using first image */ 46254837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( (((_process_flags & ProcessInterpretProperities) != 0 ) 46264837ac2f5e9dbb766129a91aa11cf7c547477119anthony || ((_option_type & AlwaysInterpretArgsFlag) != 0) 46274837ac2f5e9dbb766129a91aa11cf7c547477119anthony ) && ((_option_type & NeverInterpretArgsFlag) == 0) ) { 46284837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Interpret Percent escapes in argument 1 */ 46294837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg1n != (char *) NULL) { 46304837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg1=InterpretImageProperties(_image_info,_images,arg1n,_exception); 46314837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg1 == (char *) NULL) { 46324837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 46334837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg1=arg1n; /* use the given argument as is */ 46344837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 463552bef75f0182c7357bc5a800fa7a3b0e0a00debcanthony } 46364837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg2n != (char *) NULL) { 46374837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception); 46384837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg2 == (char *) NULL) { 46394837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandException(OptionWarning,"InterpretPropertyFailure",option); 46404837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg2=arg2n; /* use the given argument as is */ 46414837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 46428226e729aec80913941e8aa6b197e3efd03dfb43anthony } 46438226e729aec80913941e8aa6b197e3efd03dfb43anthony } 46444837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _process_flags 46454837ac2f5e9dbb766129a91aa11cf7c547477119anthony#undef _option_type 464643f425dd7d5b33887726982b28ebfa06f5560636anthony 46474837ac2f5e9dbb766129a91aa11cf7c547477119anthony do { /* break to exit code */ 46484837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* 46494837ac2f5e9dbb766129a91aa11cf7c547477119anthony No-op options (ignore these) 46504837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 4651c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (LocaleCompare("noop",option+1) == 0) /* zero argument */ 46524837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 46534837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("sans",option+1) == 0) /* one argument */ 46544837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 4655c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (LocaleCompare("sans0",option+1) == 0) /* zero argument */ 4656c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony break; 4657c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (LocaleCompare("sans1",option+1) == 0) /* one argument */ 46584837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 46594837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("sans2",option+1) == 0) /* two arguments */ 46604837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 46614837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* 46624837ac2f5e9dbb766129a91aa11cf7c547477119anthony Image Reading 46634837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 46644837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( ( LocaleCompare("read",option+1) == 0 ) || 46654837ac2f5e9dbb766129a91aa11cf7c547477119anthony ( LocaleCompare("--",option) == 0 ) ) { 46664837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Do Glob filename Expansion for 'arg1' then read all images. 46674837ac2f5e9dbb766129a91aa11cf7c547477119anthony * 46684837ac2f5e9dbb766129a91aa11cf7c547477119anthony * Expansion handles '@', '~', '*', and '?' meta-characters while ignoring 46694837ac2f5e9dbb766129a91aa11cf7c547477119anthony * (but attaching to the filenames in the generated argument list) any 46704837ac2f5e9dbb766129a91aa11cf7c547477119anthony * [...] read modifiers that may be present. 46714837ac2f5e9dbb766129a91aa11cf7c547477119anthony * 46724837ac2f5e9dbb766129a91aa11cf7c547477119anthony * For example: It will expand '*.gif[20x20]' into a list such as 46734837ac2f5e9dbb766129a91aa11cf7c547477119anthony * 'abc.gif[20x20]', 'foobar.gif[20x20]', 'xyzzy.gif[20x20]' 46744837ac2f5e9dbb766129a91aa11cf7c547477119anthony * 46754837ac2f5e9dbb766129a91aa11cf7c547477119anthony * NOTE: In IMv6 this was done globally across all images. This 46764837ac2f5e9dbb766129a91aa11cf7c547477119anthony * meant you could include IM options in '@filename' lists, but you 46774837ac2f5e9dbb766129a91aa11cf7c547477119anthony * could not include comments. Doing it only for image read makes 46784837ac2f5e9dbb766129a91aa11cf7c547477119anthony * it far more secure. 46794837ac2f5e9dbb766129a91aa11cf7c547477119anthony * 46804837ac2f5e9dbb766129a91aa11cf7c547477119anthony * Note: arguments do not have percent escapes expanded for security 46814837ac2f5e9dbb766129a91aa11cf7c547477119anthony * reasons. 46824837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 46834837ac2f5e9dbb766129a91aa11cf7c547477119anthony int argc; 46844837ac2f5e9dbb766129a91aa11cf7c547477119anthony char **argv; 46854837ac2f5e9dbb766129a91aa11cf7c547477119anthony ssize_t i; 468643f425dd7d5b33887726982b28ebfa06f5560636anthony 46874837ac2f5e9dbb766129a91aa11cf7c547477119anthony argc = 1; 46884837ac2f5e9dbb766129a91aa11cf7c547477119anthony argv = (char **) &arg1; 46894837ac2f5e9dbb766129a91aa11cf7c547477119anthony 46904837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Expand 'glob' expressions in the given filename. 46914837ac2f5e9dbb766129a91aa11cf7c547477119anthony Expansion handles any 'coder:' prefix, or read modifiers attached 46924837ac2f5e9dbb766129a91aa11cf7c547477119anthony to the filename, including them in the resulting expanded list. 46934837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 46945d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (ExpandFilenames(&argc,&argv) == MagickFalse) 46954837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptArgBreak(ResourceLimitError,"MemoryAllocationFailed", 46964837ac2f5e9dbb766129a91aa11cf7c547477119anthony option,GetExceptionMessage(errno)); 46974837ac2f5e9dbb766129a91aa11cf7c547477119anthony 46984837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* loop over expanded filename list, and read then all in */ 469952b632a875d61ac705bca7ad2b0919f90112eef9cristy for (i=0; i < (ssize_t) argc; i++) { 47004837ac2f5e9dbb766129a91aa11cf7c547477119anthony Image * 47014837ac2f5e9dbb766129a91aa11cf7c547477119anthony new_images; 4702d0792939dc18eff319129903f2627bd882a574aadirk if (_image_info->ping != MagickFalse) 47034837ac2f5e9dbb766129a91aa11cf7c547477119anthony new_images=PingImages(_image_info,argv[i],_exception); 47048226e729aec80913941e8aa6b197e3efd03dfb43anthony else 47054837ac2f5e9dbb766129a91aa11cf7c547477119anthony new_images=ReadImages(_image_info,argv[i],_exception); 47064837ac2f5e9dbb766129a91aa11cf7c547477119anthony AppendImageToList(&_images, new_images); 47078226e729aec80913941e8aa6b197e3efd03dfb43anthony } 47084837ac2f5e9dbb766129a91aa11cf7c547477119anthony argv=DestroyStringList(argv); /* Destroy the Expanded Filename list */ 47094837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 47104837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 47114837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* 47124837ac2f5e9dbb766129a91aa11cf7c547477119anthony Image Writing 47134837ac2f5e9dbb766129a91aa11cf7c547477119anthony Note: Writing a empty image list is valid in specific cases 47144837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 47154837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("write",option+1) == 0) { 47164837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Note: arguments do not have percent escapes expanded */ 47174837ac2f5e9dbb766129a91aa11cf7c547477119anthony char 4718151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy key[MagickPathExtent]; 471943f425dd7d5b33887726982b28ebfa06f5560636anthony 47204837ac2f5e9dbb766129a91aa11cf7c547477119anthony Image 47214837ac2f5e9dbb766129a91aa11cf7c547477119anthony *write_images; 472243f425dd7d5b33887726982b28ebfa06f5560636anthony 47234837ac2f5e9dbb766129a91aa11cf7c547477119anthony ImageInfo 47244837ac2f5e9dbb766129a91aa11cf7c547477119anthony *write_info; 472543f425dd7d5b33887726982b28ebfa06f5560636anthony 47264837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* Need images, unless a "null:" output coder is used */ 4727a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if ( _images == (Image *) NULL ) { 47284837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( LocaleCompare(arg1,"null:") == 0 ) 47294837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 47304837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptArgBreak(OptionError,"NoImagesForWrite",option,arg1); 47314837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 473243f425dd7d5b33887726982b28ebfa06f5560636anthony 4733151b66dffc9e3c2e8c4f8cdaca37ff987ca0f497cristy (void) FormatLocaleString(key,MagickPathExtent,"cache:%s",arg1); 47344837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) DeleteImageRegistry(key); 47354837ac2f5e9dbb766129a91aa11cf7c547477119anthony write_images=_images; 47364837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (IfPlusOp) 47374837ac2f5e9dbb766129a91aa11cf7c547477119anthony write_images=CloneImageList(_images,_exception); 47384837ac2f5e9dbb766129a91aa11cf7c547477119anthony write_info=CloneImageInfo(_image_info); 47394837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) WriteImages(write_info,write_images,arg1,_exception); 47404837ac2f5e9dbb766129a91aa11cf7c547477119anthony write_info=DestroyImageInfo(write_info); 47414837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (IfPlusOp) 47424837ac2f5e9dbb766129a91aa11cf7c547477119anthony write_images=DestroyImageList(write_images); 47434837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 474443f425dd7d5b33887726982b28ebfa06f5560636anthony } 47454837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* 47464837ac2f5e9dbb766129a91aa11cf7c547477119anthony Parenthesis and Brace operations 47474837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 47484837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("(",option) == 0) { 47494837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* stack 'push' images */ 47504837ac2f5e9dbb766129a91aa11cf7c547477119anthony Stack 47514837ac2f5e9dbb766129a91aa11cf7c547477119anthony *node; 47524837ac2f5e9dbb766129a91aa11cf7c547477119anthony 47534837ac2f5e9dbb766129a91aa11cf7c547477119anthony size_t 47544837ac2f5e9dbb766129a91aa11cf7c547477119anthony size; 47554837ac2f5e9dbb766129a91aa11cf7c547477119anthony 47564837ac2f5e9dbb766129a91aa11cf7c547477119anthony size=0; 47574837ac2f5e9dbb766129a91aa11cf7c547477119anthony node=cli_wand->image_list_stack; 4758f432c635c526259b858c9aad3d409c5c44545686cristy for ( ; node != (Stack *) NULL; node=node->next) 47594837ac2f5e9dbb766129a91aa11cf7c547477119anthony size++; 47604837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( size >= MAX_STACK_DEPTH ) 47614837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"ParenthesisNestedTooDeeply",option); 47624837ac2f5e9dbb766129a91aa11cf7c547477119anthony node=(Stack *) AcquireMagickMemory(sizeof(*node)); 47634837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (node == (Stack *) NULL) 47644837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(ResourceLimitFatalError, 47654837ac2f5e9dbb766129a91aa11cf7c547477119anthony "MemoryAllocationFailed",option); 47664837ac2f5e9dbb766129a91aa11cf7c547477119anthony node->data = (void *)cli_wand->wand.images; 47674837ac2f5e9dbb766129a91aa11cf7c547477119anthony node->next = cli_wand->image_list_stack; 47684837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->image_list_stack = node; 4769a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony cli_wand->wand.images = NewImageList(); 47704837ac2f5e9dbb766129a91aa11cf7c547477119anthony 47714837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* handle respect-parenthesis */ 4772d0792939dc18eff319129903f2627bd882a574aadirk if (IsStringTrue(GetImageOption(cli_wand->wand.image_info, 4773d0792939dc18eff319129903f2627bd882a574aadirk "respect-parenthesis")) != MagickFalse) 47744837ac2f5e9dbb766129a91aa11cf7c547477119anthony option="{"; /* fall-thru so as to push image settings too */ 47754837ac2f5e9dbb766129a91aa11cf7c547477119anthony else 47764837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 4777a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* fall thru to operation */ 477843f425dd7d5b33887726982b28ebfa06f5560636anthony } 47794837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("{",option) == 0) { 47804837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* stack 'push' of image_info settings */ 47814837ac2f5e9dbb766129a91aa11cf7c547477119anthony Stack 47824837ac2f5e9dbb766129a91aa11cf7c547477119anthony *node; 47834837ac2f5e9dbb766129a91aa11cf7c547477119anthony 47844837ac2f5e9dbb766129a91aa11cf7c547477119anthony size_t 47854837ac2f5e9dbb766129a91aa11cf7c547477119anthony size; 47864837ac2f5e9dbb766129a91aa11cf7c547477119anthony 47874837ac2f5e9dbb766129a91aa11cf7c547477119anthony size=0; 47884837ac2f5e9dbb766129a91aa11cf7c547477119anthony node=cli_wand->image_info_stack; 4789f432c635c526259b858c9aad3d409c5c44545686cristy for ( ; node != (Stack *) NULL; node=node->next) 47904837ac2f5e9dbb766129a91aa11cf7c547477119anthony size++; 47914837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( size >= MAX_STACK_DEPTH ) 47924837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"CurlyBracesNestedTooDeeply",option); 47934837ac2f5e9dbb766129a91aa11cf7c547477119anthony node=(Stack *) AcquireMagickMemory(sizeof(*node)); 47944837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (node == (Stack *) NULL) 47954837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(ResourceLimitFatalError, 47964837ac2f5e9dbb766129a91aa11cf7c547477119anthony "MemoryAllocationFailed",option); 47974837ac2f5e9dbb766129a91aa11cf7c547477119anthony 47984837ac2f5e9dbb766129a91aa11cf7c547477119anthony node->data = (void *)cli_wand->wand.image_info; 4799a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony node->next = cli_wand->image_info_stack; 4800a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 4801a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony cli_wand->image_info_stack = node; 48024837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->wand.image_info = CloneImageInfo(cli_wand->wand.image_info); 4803f432c635c526259b858c9aad3d409c5c44545686cristy if (cli_wand->wand.image_info == (ImageInfo *) NULL) { 48044837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandException(ResourceLimitFatalError,"MemoryAllocationFailed", 48054837ac2f5e9dbb766129a91aa11cf7c547477119anthony option); 48064837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->wand.image_info = (ImageInfo *)node->data; 48074837ac2f5e9dbb766129a91aa11cf7c547477119anthony node = (Stack *)RelinquishMagickMemory(node); 48088226e729aec80913941e8aa6b197e3efd03dfb43anthony break; 4809fe1aa78b307bbbc876aa67ba1f325d5c46420547anthony } 48104837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48114837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 48124837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 48134837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare(")",option) == 0) { 48144837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* pop images from stack */ 48154837ac2f5e9dbb766129a91aa11cf7c547477119anthony Stack 48164837ac2f5e9dbb766129a91aa11cf7c547477119anthony *node; 48174837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48184837ac2f5e9dbb766129a91aa11cf7c547477119anthony node = (Stack *)cli_wand->image_list_stack; 4819f432c635c526259b858c9aad3d409c5c44545686cristy if ( node == (Stack *) NULL) 48204837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"UnbalancedParenthesis",option); 48214837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->image_list_stack = node->next; 48224837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48234837ac2f5e9dbb766129a91aa11cf7c547477119anthony AppendImageToList((Image **)&node->data,cli_wand->wand.images); 48244837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->wand.images= (Image *)node->data; 48254837ac2f5e9dbb766129a91aa11cf7c547477119anthony node = (Stack *)RelinquishMagickMemory(node); 48264837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48274837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* handle respect-parenthesis - of the previous 'pushed' settings */ 48284837ac2f5e9dbb766129a91aa11cf7c547477119anthony node = cli_wand->image_info_stack; 4829f432c635c526259b858c9aad3d409c5c44545686cristy if ( node != (Stack *) NULL) 48304837ac2f5e9dbb766129a91aa11cf7c547477119anthony { 4831d0792939dc18eff319129903f2627bd882a574aadirk if (IsStringTrue(GetImageOption( 4832d0792939dc18eff319129903f2627bd882a574aadirk cli_wand->wand.image_info,"respect-parenthesis")) != MagickFalse) 48334837ac2f5e9dbb766129a91aa11cf7c547477119anthony option="}"; /* fall-thru so as to pop image settings too */ 48344837ac2f5e9dbb766129a91aa11cf7c547477119anthony else 48354837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 48364837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 48374837ac2f5e9dbb766129a91aa11cf7c547477119anthony else 48388226e729aec80913941e8aa6b197e3efd03dfb43anthony break; 48394837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* fall thru to next if */ 48404837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 48414837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("}",option) == 0) { 48424837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* pop image_info settings from stack */ 48434837ac2f5e9dbb766129a91aa11cf7c547477119anthony Stack 48444837ac2f5e9dbb766129a91aa11cf7c547477119anthony *node; 48454837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48464837ac2f5e9dbb766129a91aa11cf7c547477119anthony node = (Stack *)cli_wand->image_info_stack; 4847f432c635c526259b858c9aad3d409c5c44545686cristy if ( node == (Stack *) NULL) 48484837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"UnbalancedCurlyBraces",option); 48494837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->image_info_stack = node->next; 48504837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48514837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) DestroyImageInfo(cli_wand->wand.image_info); 48524837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->wand.image_info = (ImageInfo *)node->data; 48534837ac2f5e9dbb766129a91aa11cf7c547477119anthony node = (Stack *)RelinquishMagickMemory(node); 48544837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48554837ac2f5e9dbb766129a91aa11cf7c547477119anthony GetDrawInfo(cli_wand->wand.image_info, cli_wand->draw_info); 48564837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->quantize_info=DestroyQuantizeInfo(cli_wand->quantize_info); 48574837ac2f5e9dbb766129a91aa11cf7c547477119anthony cli_wand->quantize_info=AcquireQuantizeInfo(cli_wand->wand.image_info); 48584837ac2f5e9dbb766129a91aa11cf7c547477119anthony 48594837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 48604837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 4861a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (LocaleCompare("print",option+1) == 0) 4862a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony { 4863a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) FormatLocaleFile(stdout,"%s",arg1); 4864a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony break; 4865a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony } 4866c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (LocaleCompare("set",option+1) == 0) 4867c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony { 4868a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* Settings are applied to each image in memory in turn (if any). 4869a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony While a option: only need to be applied once globally. 4870a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 4871a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony NOTE: rguments have not been automatically percent expaneded 4872c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony */ 4873a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 4874a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* escape the 'key' once only, using first image. */ 4875a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1=InterpretImageProperties(_image_info,_images,arg1n,_exception); 4876a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (arg1 == (char *) NULL) 4877a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony CLIWandExceptionBreak(OptionWarning,"InterpretPropertyFailure", 4878a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony option); 4879c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony 4880c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (LocaleNCompare(arg1,"registry:",9) == 0) 4881c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony { 4882c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (IfPlusOp) 4883c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony { 4884c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony (void) DeleteImageRegistry(arg1+9); 4885a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1=DestroyString((char *)arg1); 4886c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony break; 4887c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony } 4888a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception); 4889a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (arg2 == (char *) NULL) { 4890a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1=DestroyString((char *)arg1); 4891c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony CLIWandExceptionBreak(OptionWarning,"InterpretPropertyFailure", 4892c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony option); 4893a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony } 4894a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageRegistry(StringRegistryType,arg1+9,arg2,_exception); 4895a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1=DestroyString((char *)arg1); 4896a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2=DestroyString((char *)arg2); 4897c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony break; 4898c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony } 4899c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony if (LocaleNCompare(arg1,"option:",7) == 0) 4900c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony { 4901c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony /* delete equivelent artifact from all images (if any) */ 4902f432c635c526259b858c9aad3d409c5c44545686cristy if (_images != (Image *) NULL) 4903a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony { 4904a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony MagickResetIterator(&cli_wand->wand); 4905d0792939dc18eff319129903f2627bd882a574aadirk while (MagickNextImage(&cli_wand->wand) != MagickFalse) 4906a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) DeleteImageArtifact(_images,arg1+7); 4907a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony MagickResetIterator(&cli_wand->wand); 4908a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony } 4909c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony /* now set/delete the global option as needed */ 4910a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* FUTURE: make escapes in a global 'option:' delayed */ 4911f432c635c526259b858c9aad3d409c5c44545686cristy arg2=(char *) NULL; 4912a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (IfNormalOp) 4913a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony { 4914a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception); 4915a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (arg2 == (char *) NULL) 4916a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony CLIWandExceptionBreak(OptionWarning, 4917a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony "InterpretPropertyFailure",option); 4918a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony } 4919a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageOption(_image_info,arg1+7,arg2); 4920a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1=DestroyString((char *)arg1); 4921a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2=DestroyString((char *)arg2); 4922c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony break; 4923c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony } 4924a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* Set Artifacts/Properties/Attributes all images (required) */ 4925a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if ( _images == (Image *) NULL ) 4926a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony CLIWandExceptArgBreak(OptionWarning,"NoImageForProperty",option,arg1); 4927a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony 4928c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony MagickResetIterator(&cli_wand->wand); 4929d0792939dc18eff319129903f2627bd882a574aadirk while (MagickNextImage(&cli_wand->wand) != MagickFalse) 4930c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony { 4931f432c635c526259b858c9aad3d409c5c44545686cristy arg2=(char *) NULL; 4932a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (IfNormalOp) 4933a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony { 4934a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2=InterpretImageProperties(_image_info,_images,arg2n,_exception); 4935a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (arg2 == (char *) NULL) 4936a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony CLIWandExceptionBreak(OptionWarning, 4937a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony "InterpretPropertyFailure",option); 4938a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony } 4939a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if (LocaleNCompare(arg1,"artifact:",9) == 0) 4940a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageArtifact(_images,arg1+9,arg2); 4941a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony else if (LocaleNCompare(arg1,"property:",9) == 0) 4942a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageProperty(_images,arg1+9,arg2,_exception); 4943a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony else 4944a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony (void) SetImageProperty(_images,arg1,arg2,_exception); 4945a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg2=DestroyString((char *)arg2); 4946c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony } 4947c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony MagickResetIterator(&cli_wand->wand); 4948a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony arg1=DestroyString((char *)arg1); 4949c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony break; 4950c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony } 49514837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("clone",option+1) == 0) { 49524837ac2f5e9dbb766129a91aa11cf7c547477119anthony Image 49534837ac2f5e9dbb766129a91aa11cf7c547477119anthony *new_images; 49544837ac2f5e9dbb766129a91aa11cf7c547477119anthony 49554837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (*option == '+') 49563677cc7465ef786d7bf9412177aea8c17149274bcristy arg1=AcquireString("-1"); 49575d0a441fe7d90e3449f2103ed88c32cec28595e6dirk if (IsSceneGeometry(arg1,MagickFalse) == MagickFalse) 49584837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"InvalidArgument",option); 4959f432c635c526259b858c9aad3d409c5c44545686cristy if ( cli_wand->image_list_stack == (Stack *) NULL) 49604837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"UnableToCloneImage",option); 49614837ac2f5e9dbb766129a91aa11cf7c547477119anthony new_images = (Image *)cli_wand->image_list_stack->data; 49624837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (new_images == (Image *) NULL) 49634837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"UnableToCloneImage",option); 49644837ac2f5e9dbb766129a91aa11cf7c547477119anthony new_images=CloneImages(new_images,arg1,_exception); 49654837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (new_images == (Image *) NULL) 49664837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionBreak(OptionError,"NoSuchImage",option); 49674837ac2f5e9dbb766129a91aa11cf7c547477119anthony AppendImageToList(&_images,new_images); 49688226e729aec80913941e8aa6b197e3efd03dfb43anthony break; 49698226e729aec80913941e8aa6b197e3efd03dfb43anthony } 49704837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* 4971422d550dfecdb591d85b6fb7dbf968116656cc4ccristy Informational Operations. 49724837ac2f5e9dbb766129a91aa11cf7c547477119anthony 4973c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony Note that these do not require either a cli-wand or images! 4974c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony Though currently a cli-wand much be provided regardless. 49754837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 4976422d550dfecdb591d85b6fb7dbf968116656cc4ccristy if (LocaleCompare("version",option+1) == 0) 4977422d550dfecdb591d85b6fb7dbf968116656cc4ccristy { 49784f7a61361f38ef4d3eaae0c74b9964a57aee813acristy ListMagickVersion(stdout); 4979422d550dfecdb591d85b6fb7dbf968116656cc4ccristy break; 4980422d550dfecdb591d85b6fb7dbf968116656cc4ccristy } 49814837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (LocaleCompare("list",option+1) == 0) { 49824837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* 4983c7994679a5a3d381abe2fdf0974adf32cf2610ceanthony FUTURE: This 'switch' should really be part of MagickCore 49844837ac2f5e9dbb766129a91aa11cf7c547477119anthony */ 49854837ac2f5e9dbb766129a91aa11cf7c547477119anthony ssize_t 49864837ac2f5e9dbb766129a91aa11cf7c547477119anthony list; 49874837ac2f5e9dbb766129a91aa11cf7c547477119anthony 49884837ac2f5e9dbb766129a91aa11cf7c547477119anthony list=ParseCommandOption(MagickListOptions,MagickFalse,arg1); 49894837ac2f5e9dbb766129a91aa11cf7c547477119anthony if ( list < 0 ) { 49904837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandExceptionArg(OptionError,"UnrecognizedListType",option,arg1); 49918226e729aec80913941e8aa6b197e3efd03dfb43anthony break; 49928226e729aec80913941e8aa6b197e3efd03dfb43anthony } 49934837ac2f5e9dbb766129a91aa11cf7c547477119anthony switch (list) 49948226e729aec80913941e8aa6b197e3efd03dfb43anthony { 49954837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickCoderOptions: 49964837ac2f5e9dbb766129a91aa11cf7c547477119anthony { 49974837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListCoderInfo((FILE *) NULL,_exception); 49984837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 49994837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 50004837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickColorOptions: 50014837ac2f5e9dbb766129a91aa11cf7c547477119anthony { 50024837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListColorInfo((FILE *) NULL,_exception); 50034837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50044837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 50054837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickConfigureOptions: 50064837ac2f5e9dbb766129a91aa11cf7c547477119anthony { 50074837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListConfigureInfo((FILE *) NULL,_exception); 50084837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50094837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 50104837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickDelegateOptions: 50114837ac2f5e9dbb766129a91aa11cf7c547477119anthony { 50124837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListDelegateInfo((FILE *) NULL,_exception); 50134837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50144837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 50154837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickFontOptions: 50164837ac2f5e9dbb766129a91aa11cf7c547477119anthony { 50174837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListTypeInfo((FILE *) NULL,_exception); 50184837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50194837ac2f5e9dbb766129a91aa11cf7c547477119anthony } 50204837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickFormatOptions: 50214837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListMagickInfo((FILE *) NULL,_exception); 50224837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50234837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickLocaleOptions: 50244837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListLocaleInfo((FILE *) NULL,_exception); 50254837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50264837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickLogOptions: 50274837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListLogInfo((FILE *) NULL,_exception); 50284837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50294837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickMagicOptions: 50304837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListMagicInfo((FILE *) NULL,_exception); 50314837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50324837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickMimeOptions: 50334837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListMimeInfo((FILE *) NULL,_exception); 50344837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50354837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickModuleOptions: 50364837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListModuleInfo((FILE *) NULL,_exception); 50374837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50384837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickPolicyOptions: 50394837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListPolicyInfo((FILE *) NULL,_exception); 50404837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50414837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickResourceOptions: 50424837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListMagickResourceInfo((FILE *) NULL,_exception); 50434837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50444837ac2f5e9dbb766129a91aa11cf7c547477119anthony case MagickThresholdOptions: 50454837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListThresholdMaps((FILE *) NULL,_exception); 50464837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50474837ac2f5e9dbb766129a91aa11cf7c547477119anthony default: 50484837ac2f5e9dbb766129a91aa11cf7c547477119anthony (void) ListCommandOptions((FILE *) NULL,(CommandOption) list, 50494837ac2f5e9dbb766129a91aa11cf7c547477119anthony _exception); 50504837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 50518226e729aec80913941e8aa6b197e3efd03dfb43anthony } 50524837ac2f5e9dbb766129a91aa11cf7c547477119anthony break; 505343f425dd7d5b33887726982b28ebfa06f5560636anthony } 50544837ac2f5e9dbb766129a91aa11cf7c547477119anthony 50554837ac2f5e9dbb766129a91aa11cf7c547477119anthony CLIWandException(OptionError,"UnrecognizedOption",option); 50564837ac2f5e9dbb766129a91aa11cf7c547477119anthony 505793b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkDisableMSCWarning(4127) 50584837ac2f5e9dbb766129a91aa11cf7c547477119anthony } while (0); /* break to exit code. */ 505993b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkRestoreMSCWarning 506043f425dd7d5b33887726982b28ebfa06f5560636anthony 50614837ac2f5e9dbb766129a91aa11cf7c547477119anthony /* clean up percent escape interpreted strings */ 50624837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg1 != arg1n ) 50634837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg1=DestroyString((char *)arg1); 50644837ac2f5e9dbb766129a91aa11cf7c547477119anthony if (arg2 != arg2n ) 50654837ac2f5e9dbb766129a91aa11cf7c547477119anthony arg2=DestroyString((char *)arg2); 506643f425dd7d5b33887726982b28ebfa06f5560636anthony 50678226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef _image_info 50688226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef _images 506992c93bd35e207736d340f1b32000006a5bf6208eanthony#undef _exception 50708226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef IfNormalOp 50718226e729aec80913941e8aa6b197e3efd03dfb43anthony#undef IfPlusOp 5072805a2d48e7e2ed7d699871183ed706699119281canthony} 5073464f1c476517436723780b8a8bb371464584453canthony 5074464f1c476517436723780b8a8bb371464584453canthony/* 5075464f1c476517436723780b8a8bb371464584453canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5076464f1c476517436723780b8a8bb371464584453canthony% % 5077464f1c476517436723780b8a8bb371464584453canthony% % 5078464f1c476517436723780b8a8bb371464584453canthony% % 5079964d28ed4391c639c60c392807c9dfb09f933ba8anthony+ C L I O p t i o n % 5080464f1c476517436723780b8a8bb371464584453canthony% % 5081464f1c476517436723780b8a8bb371464584453canthony% % 5082464f1c476517436723780b8a8bb371464584453canthony% % 5083464f1c476517436723780b8a8bb371464584453canthony%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5084464f1c476517436723780b8a8bb371464584453canthony% 5085464f1c476517436723780b8a8bb371464584453canthony% CLIOption() Processes the given option using the given CLI Magick Wand. 5086964d28ed4391c639c60c392807c9dfb09f933ba8anthony% The option arguments can be variable in number, though at this time no more 5087964d28ed4391c639c60c392807c9dfb09f933ba8anthony% that two is actually used by any option (this may change). Excess options 5088964d28ed4391c639c60c392807c9dfb09f933ba8anthony% are simply ignored. 5089464f1c476517436723780b8a8bb371464584453canthony% 5090464f1c476517436723780b8a8bb371464584453canthony% If the cli_wand->command pointer is non-null, then it is assumed that the 5091464f1c476517436723780b8a8bb371464584453canthony% option has already been search for up from the CommandOptions[] table in 5092964d28ed4391c639c60c392807c9dfb09f933ba8anthony% "MagickCore/options.c" using GetCommandOptionInfo(). If not set this 5093964d28ed4391c639c60c392807c9dfb09f933ba8anthony% routine will do the lookup instead. The pointer is reset afterward. 5094964d28ed4391c639c60c392807c9dfb09f933ba8anthony% 5095964d28ed4391c639c60c392807c9dfb09f933ba8anthony% This action allows the caller to lookup and pre-handle any 'special' 5096964d28ed4391c639c60c392807c9dfb09f933ba8anthony% options, (such as implicit reads) before calling this general option 5097964d28ed4391c639c60c392807c9dfb09f933ba8anthony% handler to deal with 'standard' command line options. 5098464f1c476517436723780b8a8bb371464584453canthony% 5099464f1c476517436723780b8a8bb371464584453canthony% The format of the CLIOption method is: 5100464f1c476517436723780b8a8bb371464584453canthony% 5101464f1c476517436723780b8a8bb371464584453canthony% void CLIOption(MagickCLI *cli_wand,const char *option, ...) 5102464f1c476517436723780b8a8bb371464584453canthony% 5103464f1c476517436723780b8a8bb371464584453canthony% A description of each parameter follows: 5104464f1c476517436723780b8a8bb371464584453canthony% 5105464f1c476517436723780b8a8bb371464584453canthony% o cli_wand: the main CLI Wand to use. 5106464f1c476517436723780b8a8bb371464584453canthony% 5107464f1c476517436723780b8a8bb371464584453canthony% o option: The special option (with any switch char) to process 5108464f1c476517436723780b8a8bb371464584453canthony% 5109964d28ed4391c639c60c392807c9dfb09f933ba8anthony% o args: any required arguments for an option (variable number) 5110464f1c476517436723780b8a8bb371464584453canthony% 5111464f1c476517436723780b8a8bb371464584453canthony% Example Usage... 5112464f1c476517436723780b8a8bb371464584453canthony% 5113464f1c476517436723780b8a8bb371464584453canthony% CLIoption(cli_wand,"-read","rose:"); 5114464f1c476517436723780b8a8bb371464584453canthony% CLIoption(cli_wand,"-virtual-pixel","transparent"); 5115464f1c476517436723780b8a8bb371464584453canthony% CLIoption(cli_wand,"-distort","SRT:","30"); 5116464f1c476517436723780b8a8bb371464584453canthony% CLIoption(cli_wand,"-write","rotated_rose.png"); 5117464f1c476517436723780b8a8bb371464584453canthony% 5118464f1c476517436723780b8a8bb371464584453canthony*/ 5119464f1c476517436723780b8a8bb371464584453canthonyWandExport void CLIOption(MagickCLI *cli_wand,const char *option,...) 5120464f1c476517436723780b8a8bb371464584453canthony{ 5121a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony const char /* extracted option args from args */ 5122464f1c476517436723780b8a8bb371464584453canthony *arg1, 5123464f1c476517436723780b8a8bb371464584453canthony *arg2; 5124464f1c476517436723780b8a8bb371464584453canthony 5125464f1c476517436723780b8a8bb371464584453canthony CommandOptionFlags 5126464f1c476517436723780b8a8bb371464584453canthony option_type; 5127464f1c476517436723780b8a8bb371464584453canthony 5128464f1c476517436723780b8a8bb371464584453canthony assert(cli_wand != (MagickCLI *) NULL); 5129e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->signature == MagickWandSignature); 5130e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(cli_wand->wand.signature == MagickWandSignature); 5131464f1c476517436723780b8a8bb371464584453canthony 5132964d28ed4391c639c60c392807c9dfb09f933ba8anthony do { /* Break Code Block for error handling */ 5133964d28ed4391c639c60c392807c9dfb09f933ba8anthony 5134964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* get information about option */ 5135964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( cli_wand->command == (const OptionInfo *) NULL ) 5136964d28ed4391c639c60c392807c9dfb09f933ba8anthony cli_wand->command = GetCommandOptionInfo(option); 5137464f1c476517436723780b8a8bb371464584453canthony#if 0 5138964d28ed4391c639c60c392807c9dfb09f933ba8anthony (void) FormatLocaleFile(stderr, "CLIOption \"%s\" matched \"%s\"\n", 5139964d28ed4391c639c60c392807c9dfb09f933ba8anthony option, cli_wand->command->mnemonic ); 5140464f1c476517436723780b8a8bb371464584453canthony#endif 5141964d28ed4391c639c60c392807c9dfb09f933ba8anthony option_type=(CommandOptionFlags) cli_wand->command->flags; 5142464f1c476517436723780b8a8bb371464584453canthony 5143964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( option_type == UndefinedOptionFlag ) 5144964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandExceptionReturn(OptionFatalError,"UnrecognizedOption",option); 5145464f1c476517436723780b8a8bb371464584453canthony 5146964d28ed4391c639c60c392807c9dfb09f933ba8anthony assert( LocaleCompare(cli_wand->command->mnemonic,option) == 0 ); 5147464f1c476517436723780b8a8bb371464584453canthony 5148ab5c745683c880339688d939bb58d49c2583265adirk /* deprecated options */ 5149964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( (option_type & DeprecateOptionFlag) != 0 ) 5150964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandExceptionBreak(OptionError,"DeprecatedOptionNoCode",option); 5151464f1c476517436723780b8a8bb371464584453canthony 5152964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* options that this module does not handle */ 5153964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ((option_type & (SpecialOptionFlag|GenesisOptionFlag)) != 0 ) 5154964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandExceptionBreak(OptionFatalError,"InvalidUseOfOption",option); 5155464f1c476517436723780b8a8bb371464584453canthony 5156964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* Get argument strings from VarArgs 5157a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony How can you determine if enough arguments was supplied? 5158a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony What happens if not enough arguments were supplied? 5159a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony */ 5160964d28ed4391c639c60c392807c9dfb09f933ba8anthony { size_t 516152b632a875d61ac705bca7ad2b0919f90112eef9cristy count = (size_t) cli_wand->command->type; 5162464f1c476517436723780b8a8bb371464584453canthony 5163964d28ed4391c639c60c392807c9dfb09f933ba8anthony va_list 5164964d28ed4391c639c60c392807c9dfb09f933ba8anthony operands; 5165464f1c476517436723780b8a8bb371464584453canthony 5166964d28ed4391c639c60c392807c9dfb09f933ba8anthony va_start(operands,option); 5167464f1c476517436723780b8a8bb371464584453canthony 5168964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=arg2=NULL; 5169964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( count >= 1 ) 5170964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg1=(const char *) va_arg(operands, const char *); 5171964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( count >= 2 ) 5172964d28ed4391c639c60c392807c9dfb09f933ba8anthony arg2=(const char *) va_arg(operands, const char *); 5173464f1c476517436723780b8a8bb371464584453canthony 5174964d28ed4391c639c60c392807c9dfb09f933ba8anthony va_end(operands); 517552cb3df0e123253562ab36093650a5339a6a2e87anthony#if 0 5176964d28ed4391c639c60c392807c9dfb09f933ba8anthony (void) FormatLocaleFile(stderr, 5177964d28ed4391c639c60c392807c9dfb09f933ba8anthony "CLIOption: \"%s\" Count: %ld Flags: %04x Args: \"%s\" \"%s\"\n", 5178964d28ed4391c639c60c392807c9dfb09f933ba8anthony option,(long) count,option_type,arg1,arg2); 5179464f1c476517436723780b8a8bb371464584453canthony#endif 5180964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 5181464f1c476517436723780b8a8bb371464584453canthony 5182964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* 5183964d28ed4391c639c60c392807c9dfb09f933ba8anthony Call the appropriate option handler 5184964d28ed4391c639c60c392807c9dfb09f933ba8anthony */ 5185464f1c476517436723780b8a8bb371464584453canthony 5186964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* FUTURE: this is temporary - get 'settings' to handle distribution of 5187964d28ed4391c639c60c392807c9dfb09f933ba8anthony settings to images attributes,proprieties,artifacts */ 5188f432c635c526259b858c9aad3d409c5c44545686cristy if ( cli_wand->wand.images != (Image *) NULL ) 518952b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) SyncImagesSettings(cli_wand->wand.image_info,cli_wand->wand.images, 519052b632a875d61ac705bca7ad2b0919f90112eef9cristy cli_wand->wand.exception); 5191464f1c476517436723780b8a8bb371464584453canthony 5192964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( (option_type & SettingOptionFlags) != 0 ) { 5193964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLISettingOptionInfo(cli_wand, option, arg1, arg2); 5194964d28ed4391c639c60c392807c9dfb09f933ba8anthony // FUTURE: Sync Specific Settings into Image Properities (not global) 5195964d28ed4391c639c60c392807c9dfb09f933ba8anthony } 5196464f1c476517436723780b8a8bb371464584453canthony 5197964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* Operators that do not need images - read, write, stack, clone */ 5198e1f6cfe697c9cc3cee3e2d982bcb1ee63b662e1fcristy if ((option_type & NoImageOperatorFlag) != 0) 5199964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLINoImageOperator(cli_wand, option, arg1, arg2); 5200464f1c476517436723780b8a8bb371464584453canthony 5201964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* FUTURE: The not a setting part below is a temporary hack due to 5202964d28ed4391c639c60c392807c9dfb09f933ba8anthony * some options being both a Setting and a Simple operator. 5203964d28ed4391c639c60c392807c9dfb09f933ba8anthony * Specifically -monitor, -depth, and -colorspace */ 5204f432c635c526259b858c9aad3d409c5c44545686cristy if ( cli_wand->wand.images == (Image *) NULL ) 5205964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( ((option_type & (SimpleOperatorFlag|ListOperatorFlag)) != 0 ) && 5206964d28ed4391c639c60c392807c9dfb09f933ba8anthony ((option_type & SettingOptionFlags) == 0 )) /* temp hack */ 5207964d28ed4391c639c60c392807c9dfb09f933ba8anthony CLIWandExceptionBreak(OptionError,"NoImagesFound",option); 5208464f1c476517436723780b8a8bb371464584453canthony 5209a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony /* Operators which loop of individual images, simply */ 5210a322a839a56b8d9fa40751b1906ce2a4780a24d6anthony if ( (option_type & SimpleOperatorFlag) != 0 && 5211f432c635c526259b858c9aad3d409c5c44545686cristy cli_wand->wand.images != (Image *) NULL) /* temp hack */ 52122c57b74e160f9b605d74dec24081309f28b83899cristy { 52132c57b74e160f9b605d74dec24081309f28b83899cristy ExceptionInfo *exception=AcquireExceptionInfo(); 521452b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLISimpleOperatorImages(cli_wand, option, arg1, arg2,exception); 52152c57b74e160f9b605d74dec24081309f28b83899cristy exception=DestroyExceptionInfo(exception); 52162c57b74e160f9b605d74dec24081309f28b83899cristy } 5217464f1c476517436723780b8a8bb371464584453canthony 5218964d28ed4391c639c60c392807c9dfb09f933ba8anthony /* Operators that work on the image list as a whole */ 5219964d28ed4391c639c60c392807c9dfb09f933ba8anthony if ( (option_type & ListOperatorFlag) != 0 ) 522052b632a875d61ac705bca7ad2b0919f90112eef9cristy (void) CLIListOperatorImages(cli_wand, option, arg1, arg2); 5221464f1c476517436723780b8a8bb371464584453canthony 522293b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkDisableMSCWarning(4127) 5223964d28ed4391c639c60c392807c9dfb09f933ba8anthony } while (0); /* end Break code block */ 522493b02b797c4127ce2b06dbd3b2d75ecc33fca759dirkRestoreMSCWarning 5225464f1c476517436723780b8a8bb371464584453canthony 5226964d28ed4391c639c60c392807c9dfb09f933ba8anthony cli_wand->command = (const OptionInfo *) NULL; /* prevent re-use later */ 5227464f1c476517436723780b8a8bb371464584453canthony} 5228