]> granicus.if.org Git - imagemagick/blob - www/magick-core.html
(no commit message)
[imagemagick] / www / magick-core.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: MagickCore, Low-level 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="magickcore, low-level, c, 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: Web Hosting" href="http://www.hostucan.com">Web Hosting</a><!-- 2012030100300 accounting@webhostingclue -->
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>MagickCore C API</h1>
245
246 <div class="doc-section">
247
248 <p>The <a href="../www/api/MagickCore/index.html">MagickCore API</a> is a low-level interface between the C programming language and the ImageMagick image processing libraries and is recommended for wizard-level programmers only.  Unlike the <a href="../www/magick-wand.html">MagickWand</a> C API which uses only a few opaque types and accessors, with MagickCore you almost exlusively access the structure members directly.  A description of the MagickCore public methods are found here:</p>
249
250 <ul>
251   <li><a href="../www/api/magick.html">Initialize or Destroy the ImageMagick Environment</a></li>
252   <li><a href="../www/api/constitute.html">Constitute an Image</a></li>
253   <li><a href="../www/api/composite.html">Composite an Image</a></li>
254   <li><a href="../www/api/image.html">Image Methods</a></li>
255   <li><a href="../www/api/color.html">Count the Colors in an Image</a></li>
256   <li><a href="../www/api/colormap.html">Colormap Methods</a></li>
257   <li><a href="../www/api/distort.html">Image Distortions</a></li>
258   <li><a href="../www/api/layer.html">Dealing with Image Layers</a></li>
259   <li><a href="../www/api/profile.html">Dealing with Image Profiles</a></li>
260   <li><a href="../www/api/quantize.html">Reduce the Number of Unique Colors in an Image</a></li>
261   <li><a href="../www/api/histogram.html">Image Histograms</a></li>
262   <li><a href="../www/api/segment.html">Segment an Image with Thresholding Fuzzy c-Means</a></li>
263   <li><a href="../www/api/resize.html">Resize an Image</a></li>
264   <li><a href="../www/api/transform.html">Transform an Image</a></li>
265   <li><a href="../www/api/shear.html">Shear or Rotate an Image by an Arbitrary Angle</a></li>
266   <li><a href="../www/api/enhance.html">Enhance an Image</a></li>
267   <li><a href="../www/api/effect.html">Add an Effect</a></li>
268   <li><a href="../www/api/morphology.html">Morphological Erosions, Dilations, Openings, and Closings</a></li>
269   <li><a href="../www/api/fx.html">Add a Special Effect</a></li>
270   <li><a href="../www/api/decorate.html">Decorate an Image</a></li>
271   <li><a href="../www/api/attribute.html">Get/Set an Image Attribute</a></li>
272   <li><a href="../www/api/property.html">Get/Set Image Properties</a></li>
273   <li><a href="../www/api/statistic.html">Get Image Statistics</a></li>
274   <li><a href="../www/api/feature.html">Get Image Features</a></li>
275   <li><a href="../www/api/annotate.html">Annotate an Image</a></li>
276   <li><a href="../www/api/paint.html">Paint on an Image</a></li>
277   <li><a href="../www/api/draw.html">Draw on an Image</a></li>
278   <li><a href="../www/api/montage.html">Create an Image Thumbnail</a></li>
279   <li><a href="../www/api/fourier.html">Compute the discrete Fourier transform (DFT)</a></li>
280   <li><a href="../www/api/compare.html">Compare an Image to a Reconstructed Image</a></li>
281   <li><a href="../www/api/display.html">Interactively Display and Edit an Image</a></li>
282   <li><a href="../www/api/animate.html">Interactively Animate an Image Sequence</a></li>
283   <li><a href="../www/api/cipher.html">Convert to and from Cipher Pixels</a></li>
284   <li><a href="../www/api/list.html">Working with Image Lists</a></li>
285   <li><a href="../www/api/image-view.html">Image View Methods</a></li>
286   <li><a href="../www/api/cache.html">Get or Set Image Pixels</a></li>
287   <li><a href="../www/api/cache-view.html">Working with Cache Views</a></li>
288   <li><a href="../www/api/stream.html">The Pixel FIFO</a></li>
289   <li><a href="../www/api/blob.html">Read or Write Binary Large OBjects</a></li>
290   <li><a href="../www/api/module.html">Loadable Modules</a></li>
291   <li><a href="../www/api/signature.html">Compute a Message Digest for an Image</a></li>
292   <li><a href="../www/api/registry.html">The Image Registry</a></li>
293   <li><a href="../www/api/exception.html">Dealing with Exceptions</a></li>
294   <li><a href="../www/api/memory.html">Memory Allocation</a></li>
295   <li><a href="../www/api/resource.html">Monitor or Limit Resource Consumption</a></li>
296   <li><a href="../www/api/monitor.html">Monitor the Progress of an Image Operation</a></li>
297   <li><a href="../www/api/version.html">Get the Version and Copyrights</a></li>
298   <li><a href="../www/api/deprecate.html">Deprecated Methods</a></li>
299   <li><a href="../www/exception.html">Error and Warning Codes</a></li>
300 </ul>
301
302 <p>After you write your MagickCore program, compile it like this:</p>
303
304 <p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>cc -o core `pkg-config --cflags --libs MagickCore` core.c</span></p>
305 <p>Set the <kbd>PKG_CONFIG_PATH</kbd> environment variable if ImageMagick is not in your default system path:</p>
306 <p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig</span></p>
307 <p>Here is a example program that utilizes the MagickCore API to get you started, <a href="../www/source/core.c">core.c</a>. It reads a GIF image, creates a thumbnail, and writes it to disk in the PNG image format.</p>
308
309 <div class="viewport">
310   #include &lt;stdio.h>
311   #include &lt;stdlib.h>
312   #include &lt;string.h>
313   #include &lt;time.h>
314   #include &lt;magick/MagickCore.h>
315
316   int main(int argc,char **argv)
317   {
318     ExceptionInfo
319       *exception;
320
321     Image
322       *image,
323       *images,
324       *resize_image,
325       *thumbnails;
326
327     ImageInfo
328       *image_info;
329
330     if (argc != 3)
331       {
332         (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
333         exit(0);
334       }
335     /*
336       Initialize the image info structure and read an image.
337     */
338     MagickCoreGenesis(*argv,MagickTrue);
339     exception=AcquireExceptionInfo();
340     image_info=CloneImageInfo((ImageInfo *) NULL);
341     (void) strcpy(image_info-&gt;filename,argv[1]);
342     images=ReadImage(image_info,exception);
343     if (exception-&gt;severity != UndefinedException)
344       CatchException(exception);
345     if (images == (Image *) NULL)
346       exit(1);
347     /*
348       Convert the image to a thumbnail.
349     */
350     thumbnails=NewImageList();
351     while ((image=RemoveFirstImageFromList(&amp;images)) != (Image *) NULL)
352     {
353       resize_image=ResizeImage(image,106,80,LanczosFilter,1.0,exception);
354       if (resize_image == (Image *) NULL)
355         MagickError(exception-&gt;severity,exception-&gt;reason,exception-&gt;description);
356       (void) AppendImageToList(&amp;thumbnails,resize_image);
357       DestroyImage(image);
358     }
359     /*
360       Write the image thumbnail.
361     */
362     (void) strcpy(thumbnails-&gt;filename,argv[2]);
363     WriteImage(image_info,thumbnails);
364     /*
365       Destroy the image thumbnail and exit.
366     */
367     thumbnails=DestroyImageList(thumbnails);
368     image_info=DestroyImageInfo(image_info);
369     exception=DestroyExceptionInfo(exception);
370     MagickCoreTerminus();
371     return(0);
372   }
373 </div>
374 <p><a id="image-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/core/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>
375
376 <div class="viewport">
377 #include &lt;stdio.h>
378 #include &lt;stdlib.h>
379 #include &lt;math.h>
380 #include &lt;magick/MagickCore.h>
381
382 static MagickBooleanType SigmoidalContrast(ImageView *contrast_view,
383   const ssize_t y,const int id,void *context)
384 {
385 #define QuantumScale  ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
386 #define SigmoidalContrast(x) \
387   (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
388
389   RectangleInfo
390     extent;
391
392   register IndexPacket
393     *indexes;
394
395   register PixelPacket
396     *pixels;
397
398   register ssize_t
399     x;
400
401   extent=GetImageViewExtent(contrast_view);
402   pixels=GetImageViewAuthenticPixels(contrast_view);
403   for (x=0; x &lt; (ssize_t) (extent.width-extent.x); x++)
404   {
405     SetPixelRed(pixels,RoundToQuantum(SigmoidalContrast(GetPixelRed(pixels)));
406     SetPixelGreen(pixels,RoundToQuantum(SigmoidalContrast(GetPixelGreen(pixels)));
407     SetPixelBlue(pixels,RoundToQuantum(SigmoidalContrast(GetPixelBlue(pixels)));
408     SetPixelOpacity(pixels,RoundToQuantum(SigmoidalContrast(GetPixelOpacity(pixels)));
409     pixels++;
410   }
411   indexes=GetImageViewAuthenticIndexes(contrast_view);
412   if (indexes != (IndexPacket *) NULL)
413     for (x=0; x &lt; (ssize_t) (extent.width-extent.x); x++)
414       SetPixelIndex(indexes+x,RoundToQuantum(SigmoidalContrast(GetPixelIndex(indexes+x))));
415   return(MagickTrue);
416 }
417
418 int main(int argc,char **argv)
419 {
420 #define ThrowImageException(image) \
421 { \
422  \
423   CatchException(exception); \
424   if (contrast_image != (Image *) NULL) \
425     contrast_image=DestroyImage(contrast_image); \
426   exit(-1); \
427 }
428 #define ThrowViewException(view) \
429 { \
430   char \
431     *description; \
432  \
433   ExceptionType \
434     severity; \
435  \
436   description=GetImageViewException(view,&amp;severity); \
437   (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
438   description=DestroyString(description); \
439   exit(-1); \
440 }
441
442   ExceptionInfo
443     *exception;
444
445   Image
446     *contrast_image;
447
448   ImageInfo
449     *image_info;
450
451   ImageView
452     *contrast_view;
453
454   MagickBooleanType
455     status;
456
457   if (argc != 3)
458     {
459       (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
460       exit(0);
461     }
462   /*
463     Read an image.
464   */
465   MagickCoreGenesis(*argv,MagickTrue);
466   image_info=AcquireImageInfo();
467   (void) CopyMagickString(image_info->filename,argv[1],MaxTextExtent);
468   exception=AcquireExceptionInfo();
469   contrast_image=ReadImage(image_info,exception);
470   if (contrast_image == (Image *) NULL)
471     ThrowImageException(contrast_image);
472   /*
473     Sigmoidal non-linearity contrast control.
474   */
475   contrast_view=NewImageView(contrast_image);
476   if (contrast_view == (ImageView *) NULL)
477     ThrowImageException(contrast_image);
478   status=UpdateImageViewIterator(contrast_view,SigmoidalContrast,(void *) NULL);
479   if (status == MagickFalse)
480     ThrowImageException(contrast_image);
481   contrast_view=DestroyImageView(contrast_view);
482   /*
483     Write the image then destroy it.
484   */
485   status=WriteImages(image_info,contrast_image,argv[2],exception);
486   if (status == MagickFalse)
487     ThrowImageException(contrast_image);
488   contrast_image=DestroyImage(contrast_image);
489   exception=DestroyExceptionInfo(exception);
490   image_info=DestroyImageInfo(image_info);
491   MagickCoreTerminus();
492   return(0);
493 }
494 </div>
495 </div>
496 \r
497 </div>\r
498 \r
499 <div id="linkbar">\r
500     <span id="linkbar-west">&nbsp;</span>\r
501     <span id="linkbar-center">\r
502       <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;\r
503       <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>\r
504     </span>\r
505     <span id="linkbar-east">&nbsp;</span>\r
506   </div>\r
507   <div class="footer">\r
508     <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>\r
509     <span id="footer-east"> <a href="http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>\r
510   </div>\r
511   <div style="clear: both; margin: 0; width: 100%; "></div>\r
512   <script type="text/javascript">\r
513     var _gaq = _gaq || [];\r
514     _gaq.push(['_setAccount', 'UA-17690367-1']);\r
515     _gaq.push(['_trackPageview']);\r
516 \r
517     (function() {\r
518       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\r
519       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\r
520       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\r
521     })();\r
522   </script>\r
523 </body>\r
524 </html>\r