]> granicus.if.org Git - imagemagick/blob - www/magick-wand.html
(no commit message)
[imagemagick] / www / magick-wand.html
1 \r
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" \r
3   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
4 <html version="-//W3C//DTD XHTML 1.1//EN"\r
5       xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"\r
6       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
7       xsi:schemaLocation="http://www.w3.org/1999/xhtml\r
8                           http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">\r
9 <head>\r
10   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>\r
11   <meta name="google-site-verification" content="MxsMq6bdLOx0KSuz1MY6yG9ZTIJ7_7DVRfl5NCAT5Yg"/>\r
12   <title>ImageMagick: MagickWand, C API for ImageMagick</title>
13   <meta http-equiv="Content-Language" content="en-US"/>
14   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
15   <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
16   <meta name="Application-name" content="ImageMagick"/>
17   <meta name="Description" content="Use ImageMagick to convert, edit, or compose bitmap images in a variety of formats.  In addition resize, rotate, shear, distort and transform images automagically."/>
18   <meta name="Application-url" content="http://www.imagemagick.org"/>
19   <meta name="Generator" content="PHP"/>
20   <meta name="Keywords" content="magickwc, api, for, imagemagick, ImageMagick, PerlMagick, image processing, OpenMP, software development library, image, photo, software, Magick++, MagickWand"/>
21   <meta name="Rating" content="GENERAL"/>
22   <meta name="Robots" content="INDEX, FOLLOW"/>
23   <meta name="Generator" content="ImageMagick Studio LLC"/>
24   <meta name="Author" content="ImageMagick Studio LLC"/>
25   <meta name="Revisit-after" content="2 DAYS"/>
26   <meta name="Resource-type" content="document"/>
27   <meta name="Copyright" content="Copyright (c) 1999-2012 ImageMagick Studio LLC"/>
28   <meta name="Distribution" content="Global"/>
29   <link rel="icon" href="../images/wand.png"/>
30   <link rel="shortcut icon" href="../images/wand.ico"  type="images/x-icon"/>
31   <link rel="canonical" href="http://www.imagemagick.org" />\r
32   <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>\r
33   <!-- Add jQuery library -->\r
34   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>\r
35   \r
36   <!-- Optionaly include easing and/or mousewheel plugins -->\r
37   <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.easing-1.3.pack.js"></script>\r
38   <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.mousewheel-3.0.6.pack.js"></script>\r
39   \r
40   <!-- Add fancyBox -->\r
41   <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/jquery.fancybox.css?v=2.0.3" type="text/css" media="screen" />\r
42   <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.fancybox.pack.js?v=2.0.3"></script>\r
43   \r
44   <!-- Optionaly include button and/or thumbnail helpers -->\r
45   <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.css?v=2.0.3" type="text/css" media="screen" />\r
46   <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.js?v=2.0.3"></script>\r
47   \r
48   <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.css?v=2.0.3" type="text/css" media="screen" />\r
49   <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.js?v=2.0.3"></script>\r
50   <script type="text/javascript">\r
51         $(document).ready(function() {\r
52                 $(".fancybox").fancybox();\r
53         });\r
54   </script>\r
55   <!-- ImageMagick style -->\r
56   <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />\r
57   <style type="text/css" media="all">\r
58     @import url("../www/magick.css");\r
59   </style>\r
60 </head>\r
61 \r
62 <body id="www-imagemagick-org">\r
63 <div class="titlebar">\r
64 <div style="margin: 17px auto; float: left;">\r
65   <script type="text/javascript">\r
66   <!--\r
67     google_ad_client = "pub-3129977114552745";\r
68     google_ad_slot = "5439289906";\r
69     google_ad_width = 728;\r
70     google_ad_height = 90;\r
71   //-->\r
72   </script>\r
73   <script type="text/javascript"\r
74     src="http://pagead2.googlesyndication.com/pagead/show_ads.js">\r
75   </script>\r
76 </div>\r
77 <a href="http://www.imagemagick.org/discourse-server/">\r
78   <img src="../images/logo.jpg"\r
79   alt="ImageMagick Logo"\r
80   style="width: 123px; height: 118px; border: 0px; float: right;" /></a>\r
81 <a href="../index.html">\r
82   <img src="../images/sprite.jpg"\r
83   alt="ImageMagick Sprite"\r
84   style="width: 114px; height: 118px; border: 0px; float: right;" /></a>\r
85 </div>\r
86 \r
87 <div class="westbar">\r
88 \r
89 <div class="menu">
90   <a title="About ImageMagick" href="../index.html">About ImageMagick</a>
91 </div>
92 <div class="menu">
93   <a title="Binary Releases" href="../www/binary-releases.html">Binary Releases</a>
94 </div>
95 <div class="sub">
96     <a title="Binary Release: Unix" href="../www/binary-releases.html#unix">Unix</a>
97 </div>
98 <div class="sub">
99     <a title="Binary Release: MacOS X" href="../www/binary-releases.html#macosx">Mac OS X</a>
100 </div>
101 <div class="sub">
102     <a title="Binary Release: iOS" href="../www/binary-releases.html#iOS">iOS</a>
103 </div>
104 <div class="sub">
105     <a title="Binary Release: Windows" href="../www/binary-releases.html#windows">Windows</a>
106 </div>
107 <div class="sep"></div>\r
108 <div class="menu">
109   <a title="Command-line Tools" href="../www/command-line-tools.html">Command-line Tools</a>
110 </div>
111 <div class="sub">
112     <a title="Command-line Tools: Processing" href="../www/command-line-processing.html">Processing</a>
113 </div>
114 <div class="sub">
115     <a title="Command-line Tools: Options" href="../www/command-line-options.html">Options</a>
116 </div>
117 <div class="sub">
118     <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
119 </div>
120 <div class="menu">
121   <a title="Program Interfaces" href="../www/api.html">Program Interfaces</a>
122 </div>
123 <div class="sub">
124     <a title="Program Interface: MagickWand" href="../www/magick-wand.html">MagickWand</a>
125 </div>
126 <div class="sub">
127     <a title="Program Interface: MagickCore" href="../www/magick-core.html">MagickCore</a>
128 </div>
129 <div class="sub">
130     <a title="Program Interface: PerlMagick" href="../www/perl-magick.html">PerlMagick</a>
131 </div>
132 <div class="sub">
133     <a title="Program Interface: Magick++" href="../www/magick++.html">Magick++</a>
134 </div>
135 <div class="sep"></div>\r
136 <div  class="menu">
137    <a title="Install from Source" href="../www/install-source.html">Install from Source</a>
138 </div>
139 <div class="sub">
140     <a title="Install from Source: Unix" href="../www/install-source.html#unix">Unix</a>
141 </div>
142 <div class="sub">
143     <a title="Install from Source: Windows" href="../www/install-source.html#windows">Windows</a>
144  </div>
145 <div class="menu">
146   <a title="Resources" href="../www/resources.html">Resources</a>
147 </div>
148 <div class="menu">
149   <a title="Architecture" href="../www/architecture.html">Architecture</a>
150 </div>
151 <div class="menu">
152   <a title="Download" href="../www/download.html">Download</a>
153 </div>
154 <div class="sep"></div>\r
155 <div class="menu">
156   <a title="Search" href="../www/search.html">Search</a>
157 </div>
158 <div class="sep"></div>\r
159 <div class="menu">
160   <a title="Site Map" href="../www/sitemap.html">Site Map</a>
161 </div>
162 <div  class="sub">
163   <a title="Site Map: Links" href="../www/links.html">Links</a>
164 </div>
165 <div class="sep"></div>\r
166 <div class="menu">
167   <a rel="follow" title="Sponsors" href="../www/sponsors.html">Sponsors:</a>
168
169   <a href="http://www.networkredux.com"> <img src="../images/networkredux.png" width="140" height="31" alt="[sponsor]" style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a>
170   <a href="http://www.dinodirect.com/ipads-tablets/"> <img src="../images/dino-direct.jpg" width="140" height="90" alt="[sponsor]" style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a><!-- 201204010120 mickey@163... -->
171 <div class="sponsbox">
172 <div class="sponsor">
173   <a rel="follow" title="Android Tablet" href="http://www.dinodirect.com/ipads-tablets/">Android Tablet</a><!-- 201204010120 mickey@163... -->
174 </div>
175 <div class="sponsor">
176   <a rel="follow" title="Sponsor: Web Hosting" href="http://www.micfo.com">Web Hosting</a><!-- 209901010090s golestan -->
177 </div>
178 <div class="sponsor">
179   <a rel="follow" title="Sponsor: Autos Part" href="http://www.pkwteile.de/autoteile">Autos Part</a><!-- 201203010270 info@pkwte... -->
180 </div>
181 <div class="sponsor">
182   <a rel="follow" title="Sponsor: Web Site Hosting" href="http://webhostinggeeks.com">Web Site Hosting</a><!-- 201302010900 funds@enmob... -->
183 </div>
184 <div class="sponsor">
185   <a rel="follow" title="Sponsor: Tenant Check" href="http://www.rentmethod.com/">Tenant Check</a><!-- 201203010090 chris@rentm... -->
186 </div>
187 <div class="sponsor">
188   <a rel="follow" title="Sponsor: VPS" href="http://www.interdominios.com/vps">VPS</a><!-- 201204010090 barsh@inter... -->
189 </div>
190 <div class="sponsor">
191    <a rel="follow" title="Sponsor: Premium Quality Stock Photos" href="http://www.f1online.pro/en/">Premium Quality Stock Photos</a><!-- 2012080100540 ... -->
192 </div>
193 <div class="sponsor">
194   <a rel="follow" title="Sponsor: Search engine optimisation" href="http://www.seomoves.com.au">Search engine optimisation</a><!-- 201301010090s jen@seo lowprofilelinks -->
195 </div>
196 <div class="sponsor">
197    <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 2012070100250 ... -->
198 </div>
199 <div class="sponsor">
200   <a rel="follow" title="Sponsor: Managed Server" href="http://www.robhost.de">Managed Server</a><!-- 201210010720 klikics... -->
201 </div>
202 <div class="sponsor">
203    <a rel="follow" title="Sponsor: Stock Photography" href="http://www.fotosearch.com/">Stock Photography</a><!-- 2012040100250 ... -->
204 </div>
205 <div class="sponsor">
206   <a rel="follow" title="Sponsor: Autoteile" href="http://www.q11-shop.de">Autoteile</a><!-- 201205010540 suvalj -->
207 </div>
208 <div class="sponsor">
209    <a rel="follow" title="Sponsor: Royalty Free Stock Images" href="http://www.canstockphoto.com/">Royalty Free Stock Images</a><!-- 2012050100360 support@can -->
210 </div>
211 <div class="sponsor">
212   <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingsecretrevealed.com">Web Hosting Secret Revealed</a><!-- 201204010540 iamchee jerry -->
213 </div>
214 <div class="sponsor">
215   <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
216 </div>
217 <div class="sponsor">
218    <a rel="follow" title="Sponsor: Free Catalogs" href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 20120801000600 -->
219 </div>
220 <div class="sponsor">
221    <a rel="follow" title="Sponsor: Bildbearbeitung" href="http://www.bildschliff.de">Bildbearbeitung</a><!-- 2012060100300 strait.de-->
222 </div>
223 </div>
224 </div>
225 </div>\r
226 \r
227 <div class="eastbar">\r
228   <div class="g-plusone" data-size="standard" data-count="false"></div>\r
229   <script type="text/javascript">\r
230     window.___gcfg = {\r
231       lang: 'en-US'\r
232     };\r
233 \r
234     (function() {\r
235       var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;\r
236       po.src = 'https://apis.google.com/js/plusone.js';\r
237       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);\r
238     })();\r
239   </script>\r
240 </div>\r
241 \r
242 <div class="main">\r
243 \r
244 <h1>MagickWand C API</h1>
245
246 <div class="doc-section">
247 <p>The <a href="../www/api/MagickWand/index.html">MagickWand API</a> is the recommended interface between the C programming language and the ImageMagick image processing libraries.  Unlike the <a href="../www/magick-core.html">MagickCore</a> C API, MagickWand uses only a few opaque types.  Accessors are available to set or get important wand properties.  A description of the MagickWand public methods are found here:</p>
248
249 <ul>
250   <li><a href="../www/api/magick-wand.html">Magick Wand Methods</a></li>
251   <li><a href="../www/api/magick-property.html">Set or Get Magick Wand Properties</a></li>
252   <li><a href="../www/api/magick-image.html">Magick Wand Image Methods</a></li>
253   <li><a href="../www/api/pixel-iterator.html">Pixel Iterator Methods</a></li>
254   <li><a href="../www/api/pixel-wand.html">Pixel Wand Methods</a></li>
255   <li><a href="../www/api/drawing-wand.html">Image Vector Drawing</a></li>
256   <li><a href="../www/api/mogrify.html">Command-line Interface</a></li>
257   <li><a href="../www/api/wand-view.html">Wand View Methods</a></li>
258   <li><a href="../www/api/magick-deprecate.html">Deprecated Methods</a></li>
259   <li><a href="../www/exception.html">Error and Warning Codes</a></li>
260 </ul>
261
262 <p>After you write your MagickWand program, compile it like this:</p>
263
264 <p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>cc -o wand `pkg-config --cflags --libs MagickWand` wand.c</span></p>
265 <p>Set the <kbd>PKG_CONFIG_PATH</kbd> environment variable if ImageMagick is not in your default system path:</p>
266 <p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig</span></p>
267 <p>Here is a example program that utilizes the MagickWand API to get you started, <a href="../www/source/wand.c">wand.c</a>. It reads an image, creates a thumbnail, and writes the result to disk.</p>
268
269 <div class="viewport">
270 #include &lt;stdio.h>
271 #include &lt;stdlib.h>
272 #include &lt;wand/MagickWand.h>
273
274 int main(int argc,char **argv)
275 {
276 #define ThrowWandException(wand) \
277 { \
278   char \
279     *description; \
280  \
281   ExceptionType \
282     severity; \
283  \
284   description=MagickGetException(wand,&amp;severity); \
285   (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
286   description=(char *) MagickRelinquishMemory(description); \
287   exit(-1); \
288 }
289
290   MagickBooleanType
291     status;
292
293   MagickWand
294     *magick_wand;
295
296   if (argc != 3)
297     {
298       (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
299       exit(0);
300     }
301   /*
302     Read an image.
303   */
304   MagickWandGenesis();
305   magick_wand=NewMagickWand();
306   status=MagickReadImage(magick_wand,argv[1]);
307   if (status == MagickFalse)
308     ThrowWandException(magick_wand);
309   /*
310     Turn the images into a thumbnail sequence.
311   */
312   MagickResetIterator(magick_wand);
313   while (MagickNextImage(magick_wand) != MagickFalse)
314     MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);
315   /*
316     Write the image then destroy it.
317   */
318   status=MagickWriteImages(magick_wand,argv[2],MagickTrue);
319   if (status == MagickFalse)
320     ThrowWandException(magick_wand);
321   magick_wand=DestroyMagickWand(magick_wand);
322   MagickWandTerminus();
323   return(0);
324 }
325 </div>
326
327 <p>Here is another program that shows one way to get and set image pixels with the MagickWand API, <a href="../www/source/contrast.c">contrast.c</a>. It reads an image, applies sigmoidal non-linearity contrast control, and writes the result to disk.</p>
328
329 <div class="viewport">
330 #include &lt;stdio.h>
331 #include &lt;stdlib.h>
332 #include &lt;math.h>
333 #include &lt;wand/MagickWand.h>
334
335 int main(int argc,char **argv)
336 {
337 #define QuantumScale  ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
338 #define SigmoidalContrast(x) \
339   (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
340 #define ThrowWandException(wand) \
341 { \
342   char \
343     *description; \
344  \
345   ExceptionType \
346     severity; \
347  \
348   description=MagickGetException(wand,&amp;severity); \
349   (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
350   description=(char *) MagickRelinquishMemory(description); \
351   exit(-1); \
352 }
353
354   long
355     y;
356
357   MagickBooleanType
358     status;
359
360   MagickPixelPacket
361     pixel;
362
363   MagickWand
364     *contrast_wand,
365     *image_wand;
366
367   PixelIterator
368     *contrast_iterator,
369     *iterator;
370
371   PixelWand
372     **contrast_pixels,
373     **pixels;
374
375   register long
376     x;
377
378   unsigned long
379     width;
380
381   if (argc != 3)
382     {
383       (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
384       exit(0);
385     }
386   /*
387     Read an image.
388   */
389   MagickWandGenesis();
390   image_wand=NewMagickWand();
391   status=MagickReadImage(image_wand,argv[1]);
392   if (status == MagickFalse)
393     ThrowWandException(image_wand);
394   contrast_wand=CloneMagickWand(image_wand);
395   /*
396     Sigmoidal non-linearity contrast control.
397   */
398   iterator=NewPixelIterator(image_wand);
399   contrast_iterator=NewPixelIterator(contrast_wand);
400   if ((iterator == (PixelIterator *) NULL) ||
401       (contrast_iterator == (PixelIterator *) NULL))
402     ThrowWandException(image_wand);
403   for (y=0; y &lt; (long) MagickGetImageHeight(image_wand); y++)
404   {
405     pixels=PixelGetNextIteratorRow(iterator,&amp;width);
406     contrast_pixels=PixelGetNextIteratorRow(contrast_iterator,&amp;width);
407     if ((pixels == (PixelWand **) NULL) ||
408         (contrast_pixels == (PixelWand **) NULL))
409       break;
410     for (x=0; x &lt; (long) width; x++)
411     {
412       PixelGetMagickColor(pixels[x],&amp;pixel);
413       pixel.red=SigmoidalContrast(pixel.red);
414       pixel.green=SigmoidalContrast(pixel.green);
415       pixel.blue=SigmoidalContrast(pixel.blue);
416       pixel.index=SigmoidalContrast(pixel.index);
417       PixelSetMagickColor(contrast_pixels[x],&amp;pixel);
418     }
419     (void) PixelSyncIterator(contrast_iterator);
420   }
421   if (y &lt; (long) MagickGetImageHeight(image_wand))
422     ThrowWandException(image_wand);
423   contrast_iterator=DestroyPixelIterator(contrast_iterator);
424   iterator=DestroyPixelIterator(iterator);
425   image_wand=DestroyMagickWand(image_wand);
426   /*
427     Write the image then destroy it.
428   */
429   status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
430   if (status == MagickFalse)
431     ThrowWandException(image_wand);
432   contrast_wand=DestroyMagickWand(contrast_wand);
433   MagickWandTerminus();
434   return(0);
435 }
436 </div>
437 <p><a id="wand-view"></a>Now lets perform the same contrast enhancement while taking advantage of our dual or quad-core processing system by running the algorithm in parallel utilizing wand views.  The <a href="../www/source/wand/sigmoidal-contrast.c">sigmoidal-contrast.c</a> module reads an image, applies sigmoidal non-linearity contrast control, and writes the result to disk just like the previous contrast enhancement program, but now it does its work in parallel (assumes ImageMagick is built with OpenMP support).</p>
438
439 <div class="viewport">
440 #include &lt;stdio.h>
441 #include &lt;stdlib.h>
442 #include &lt;math.h>
443 #include &lt;wand/MagickWand.h>
444
445 static MagickBooleanType SigmoidalContrast(WandView *pixel_view,
446   const ssize_t y,const int id,void *context)
447 {
448 #define QuantumScale  ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
449 #define SigmoidalContrast(x) \
450   (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
451
452   RectangleInfo
453     extent;
454
455   MagickPixelPacket
456     pixel;
457
458   PixelWand
459     **pixels;
460
461   register long
462     x;
463
464   extent=GetWandViewExtent(contrast_view);
465   pixels=GetWandViewPixels(contrast_view);
466   for (x=0; x &lt; (long) (extent.width-extent.height); x++)
467   {
468     PixelGetMagickColor(pixels[x],&amp;pixel);
469     pixel.red=SigmoidalContrast(pixel.red);
470     pixel.green=SigmoidalContrast(pixel.green);
471     pixel.blue=SigmoidalContrast(pixel.blue);
472     pixel.index=SigmoidalContrast(pixel.index);
473     PixelSetMagickColor(contrast_pixels[x],&amp;pixel);
474   }
475   return(MagickTrue);
476 }
477
478 int main(int argc,char **argv)
479 {
480 #define ThrowViewException(view) \
481 { \
482   description=GetWandViewException(view,&amp;severity); \
483   (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
484   description=(char *) MagickRelinquishMemory(description); \
485   exit(-1); \
486 }
487 #define ThrowWandException(wand) \
488 { \
489   description=MagickGetException(wand,&amp;severity); \
490   (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
491   description=(char *) MagickRelinquishMemory(description); \
492   exit(-1); \
493 }
494
495   char
496     *description;
497
498   ExceptionType
499     severity;
500
501   MagickBooleanType
502     status;
503
504   MagickPixelPacket
505     pixel;
506
507   MagickWand
508     *contrast_wand;
509
510   WandView
511     *contrast_view;
512
513   if (argc != 3)
514     {
515       (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
516       exit(0);
517     }
518   /*
519     Read an image.
520   */
521   MagickWandGenesis();
522   contrast_wand=NewMagickWand();
523   status=MagickReadImage(contrast_wand,argv[1]);
524   if (status == MagickFalse)
525     ThrowWandException(contrast_wand);
526   /*
527     Sigmoidal non-linearity contrast control.
528   */
529   contrast_view=NewWandView(contrast_wand);
530   if (contrast_view == (WandView *) NULL)
531     ThrowWandException(contrast_wand);
532   status=UpdateWandViewIterator(contrast_view,SigmoidalContrast,(void *) NULL);
533   if (status == MagickFalse)
534     ThrowWandException(contrast_wand);
535   contrast_view=DestroyWandView(contrast_view);
536   /*
537     Write the image then destroy it.
538   */
539   status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
540   if (status == MagickFalse)
541     ThrowWandException(contrast_wand);
542   contrast_wand=DestroyMagickWand(contrast_wand);
543   MagickWandTerminus();
544   return(0);
545 }
546 </div>
547 <p><a href="http://members.shaw.ca/el.supremo/MagickWand/">MagickWand Examples in C</a> illustrates how to use the ImageMagick MagickWand API. Each example is presented as a C function, complete with headers, so that it can be copied to a file and then included in your own C project.</p>
548 </div>
549 \r
550 </div>\r
551 \r
552 <div id="linkbar">\r
553     <span id="linkbar-west">&nbsp;</span>\r
554     <span id="linkbar-center">\r
555       <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;\r
556       <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>\r
557     </span>\r
558     <span id="linkbar-east">&nbsp;</span>\r
559   </div>\r
560   <div class="footer">\r
561     <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>\r
562     <span id="footer-east"> <a href="http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>\r
563   </div>\r
564   <div style="clear: both; margin: 0; width: 100%; "></div>\r
565   <script type="text/javascript">\r
566     var _gaq = _gaq || [];\r
567     _gaq.push(['_setAccount', 'UA-17690367-1']);\r
568     _gaq.push(['_trackPageview']);\r
569 \r
570     (function() {\r
571       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r
572       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r
573       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r
574     })();\r
575   </script>\r
576 </body>\r
577 </html>\r