2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
\r
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
\r
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
\r
6 <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U=" />
\r
7 <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf" />
\r
8 <style type="text/css" media="screen,projection"><!--
\r
9 @import url("../www/magick.css");
\r
11 <link rel="shortcut icon" href="../images/wand.ico" type="images/vnd.microsoft.icon"/>
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="Generator" content="PHP"/>
17 <meta name="Keywords" content="magickwc, api, for, imagemagick, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
18 <meta name="Description" content="ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (about 100) including GIF, JPEG, JPEG-2000, PNG, PDF, PhotoCD, TIFF, and DPX. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves. ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you can freely use, copy, modify, and distribute. Its license is compatible with the GPL. It runs on all major operating systems. The functionality of ImageMagick is typically utilized from the command line or you can use the features from programs written in your favorite programming language. Choose from these interfaces: MagickCore (C), MagickWand (C), ChMagick (Ch), Magick++ (C++), JMagick (Java), L-Magick (Lisp), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK). With a language interface, use ImageMagick to modify or create images automagically and dynamically."/>
19 <meta name="Rating" content="GENERAL"/>
20 <meta name="Robots" content="INDEX, FOLLOW"/>
21 <meta name="Generator" content="ImageMagick Studio LLC"/>
22 <meta name="Author" content="ImageMagick Studio LLC"/>
23 <meta name="Revisit-after" content="2 DAYS"/>
24 <meta name="Resource-type" content="document"/>
25 <meta name="Copyright" content="Copyright (c) 1999-2009 ImageMagick Studio LLC"/>
26 <meta name="Distribution" content="Global"/>
29 <body id="www-imagemagick-org">
\r
30 <div class="titlebar">
\r
31 <a href="../index.html">
\r
32 <img src="../images/script.png" alt="[ImageMagick]"
\r
33 style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>
\r
34 <a href="http://www.networkredux.com">
\r
35 <img src="../images/networkredux.png" alt="[sponsor]"
\r
36 style="margin: 45px auto; border: 0px; float: left;" /></a>
\r
37 <a href="http://www.imagemagick.org/discourse-server/">
\r
38 <img src="../images/logo.jpg" alt=""
\r
39 style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
\r
40 <a href="../index.html">
\r
41 <img src="../images/sprite.jpg" alt=""
\r
42 style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
\r
45 <div class="eastbar">
\r
48 <a href="../index.html">About ImageMagick</a>
50 <div class="sep"></div>
\r
52 <a href="../www/command-line-tools.html">Command-line Tools</a>
55 <a href="../www/command-line-processing.html">Processing</a>
58 <a href="../www/command-line-options.html">Options</a>
61 <a href="http://www.imagemagick.org/Usage/">Usage</a>
64 <a href="../www/api.html">Program Interfaces</a>
67 <a href="../www/magick-wand.html">MagickWand</a>
70 <a href="../www/magick-core.html">MagickCore</a>
73 <a href="../www/perl-magick.html">PerlMagick</a>
76 <a href="../Magick++/">Magick++</a>
79 <a href="../www/architecture.html">Architecture</a>
81 <div class="sep"></div>
\r
83 <a href="../www/install-source.html">Install from Source</a>
86 <a href="../www/install-source.html#unix">Unix</a>
89 <a href="../www/install-source.html#windows">Windows</a>
92 <a href="../www/binary-releases.html">Binary Releases</a>
95 <a href="../www/binary-releases.html#unix">Unix</a>
98 <a href="../www/binary-releases.html#macosx">Mac OS X</a>
101 <a href="../www/binary-releases.html#windows">Windows</a>
104 <a href="../www/resources.html">Resources</a>
106 <div class="sep"></div>
\r
108 <a href="../www/download.html">Download</a>
110 <div class="sep"></div>
\r
112 <a href="http://www.imagemagick.org/script/search.php">Search</a>
114 <div class="sep"></div>
\r
116 <a href="../www/sitemap.html">Site Map</a>
119 <a href="../www/links.html">Links</a>
121 <div class="sep"></div>
\r
123 <a href="../www/sponsors.html">Sponsors:</a>
125 <div class="sponsbox">
126 <div class="sponsor">
127 <a href="http://www.goyax.de">Börse</a><!-- 201001000240 Gewiese digital-finance.de -->
129 <div class="sponsor">
130 <a href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012001200 allesdruck.de-->
132 <div class="sponsor">
133 <a href="http://www.blumenversender.com">Blumenversand</a><!-- 200911010120 -->
135 <div class="sponsor">
136 <a href="http://www.print24.de/">Druckerei</a><!-- 200911010480 -->
138 <div class="sponsor">
139 <a href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 201002010000 -->
141 <div class="sponsor">
142 <a href="http://www.online-kredit-index.de">Kredit</a><!-- 201002010120 Buchhorn -->
152 <p class="navigation-index"></p>
154 <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>
157 <li><a href="../www/api/magick-wand.html">Magick Wand Methods</a></li>
158 <li><a href="../www/api/magick-property.html">Set or Get Magick Wand Properties</a></li>
159 <li><a href="../www/api/magick-image.html">Magick Wand Image Methods</a></li>
160 <li><a href="../www/api/pixel-iterator.html">Pixel Iterator Methods</a></li>
161 <li><a href="../www/api/pixel-view.html">Pixel View Methods</a></li>
162 <li><a href="../www/api/pixel-wand.html">Pixel Wand Methods</a></li>
163 <li><a href="../www/api/drawing-wand.html">Image Vector Drawing</a></li>
164 <li><a href="../www/api/magick-deprecate.html">Deprecated Methods</a></li>
165 <li><a href="../www/exception.html">Error and Warning Codes</a></li>
169 <p>After you write your MagickWand program, compile it like this:</p>
171 <p class='crt'><span class="crtprompt"> $magick> </span><span class='crtin'>cc `MagickWand-config --cflags --cppflags` -o wand wand.c `MagickWand-config --ldflags --libs`</span></p>
172 <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>
174 <div class="viewport">
176 #include <stdio.h>
177 #include <stdlib.h>
178 #include <wand/MagickWand.h>
180 int main(int argc,char **argv)
182 #define ThrowWandException(wand) \
190 description=MagickGetException(wand,&severity); \
191 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
192 description=(char *) MagickRelinquishMemory(description); \
204 (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
211 magick_wand=NewMagickWand();
212 status=MagickReadImage(magick_wand,argv[1]);
213 if (status == MagickFalse)
214 ThrowWandException(magick_wand);
216 Turn the images into a thumbnail sequence.
218 MagickResetIterator(magick_wand);
219 while (MagickNextImage(magick_wand) != MagickFalse)
220 MagickResizeImage(magick_wand,106,80,LanczosFilter,1.0);
222 Write the image then destroy it.
224 status=MagickWriteImages(magick_wand,argv[2],MagickTrue);
225 if (status == MagickFalse)
226 ThrowWandException(magick_wand);
227 magick_wand=DestroyMagickWand(magick_wand);
228 MagickWandTerminus();
234 <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>
236 <div class="viewport">
238 #include <stdio.h>
239 #include <stdlib.h>
241 #include <wand/MagickWand.h>
243 int main(int argc,char **argv)
245 #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
246 #define SigmoidalContrast(x) \
247 (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
248 #define ThrowWandException(wand) \
256 description=MagickGetException(wand,&severity); \
257 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
258 description=(char *) MagickRelinquishMemory(description); \
291 (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
298 image_wand=NewMagickWand();
299 status=MagickReadImage(image_wand,argv[1]);
300 if (status == MagickFalse)
301 ThrowWandException(image_wand);
302 contrast_wand=CloneMagickWand(image_wand);
304 Sigmoidal non-linearity contrast control.
306 iterator=NewPixelIterator(image_wand);
307 contrast_iterator=NewPixelIterator(contrast_wand);
308 if ((iterator == (PixelIterator *) NULL) ||
309 (contrast_iterator == (PixelIterator *) NULL))
310 ThrowWandException(image_wand);
311 for (y=0; y < (long) MagickGetImageHeight(image_wand); y++)
313 pixels=PixelGetNextIteratorRow(iterator,&width);
314 contrast_pixels=PixelGetNextIteratorRow(contrast_iterator,&width);
315 if ((pixels == (PixelWand **) NULL) ||
316 (contrast_pixels == (PixelWand **) NULL))
318 for (x=0; x < (long) width; x++)
320 PixelGetMagickColor(pixels[x],&pixel);
321 pixel.red=SigmoidalContrast(pixel.red);
322 pixel.green=SigmoidalContrast(pixel.green);
323 pixel.blue=SigmoidalContrast(pixel.blue);
324 pixel.index=SigmoidalContrast(pixel.index);
325 PixelSetMagickColor(contrast_pixels[x],&pixel);
327 (void) PixelSyncIterator(contrast_iterator);
329 if (y < (long) MagickGetImageHeight(image_wand))
330 ThrowWandException(image_wand);
331 contrast_iterator=DestroyPixelIterator(contrast_iterator);
332 iterator=DestroyPixelIterator(iterator);
333 image_wand=DestroyMagickWand(image_wand);
335 Write the image then destroy it.
337 status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
338 if (status == MagickFalse)
339 ThrowWandException(image_wand);
340 contrast_wand=DestroyMagickWand(contrast_wand);
341 MagickWandTerminus();
346 <p>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 pixel views. The <a href="../www/source/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>
348 <div class="viewport">
350 #include <stdio.h>
351 #include <stdlib.h>
353 #include <wand/MagickWand.h>
355 static MagickBooleanType SigmoidalContrast(PixelView *pixel_view,
358 #define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
359 #define SigmoidalContrast(x) \
360 (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
371 pixels=GetPixelViewPixels(contrast_view);
372 for (x=0; x < (long) GetPixelViewWidth(contrast_view); x++)
374 PixelGetMagickColor(pixels[x],&pixel);
375 pixel.red=SigmoidalContrast(pixel.red);
376 pixel.green=SigmoidalContrast(pixel.green);
377 pixel.blue=SigmoidalContrast(pixel.blue);
378 pixel.index=SigmoidalContrast(pixel.index);
379 PixelSetMagickColor(contrast_pixels[x],&pixel);
384 int main(int argc,char **argv)
386 #define ThrowWandException(wand) \
394 description=MagickGetException(wand,&severity); \
395 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
396 description=(char *) MagickRelinquishMemory(description); \
414 (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
421 contrast_wand=NewMagickWand();
422 status=MagickReadImage(contrast_wand,argv[1]);
423 if (status == MagickFalse)
424 ThrowWandException(contrast_wand);
426 Sigmoidal non-linearity contrast control.
428 contrast_view=NewPixelView(contrast_wand);
429 if (contrast_view == (PixelView *) NULL)
430 ThrowWandException(contrast_wand);
431 status=UpdatePixelViewIterator(contrast_view,SigmoidalContrast,(void *) NULL);
432 if (status == MagickFalse)
433 ThrowWandException(contrast_wand);
434 contrast_view=DestroyPixelView(contrast_view);
436 Write the image then destroy it.
438 status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
439 if (status == MagickFalse)
440 ThrowWandException(contrast_wand);
441 contrast_wand=DestroyMagickWand(contrast_wand);
442 MagickWandTerminus();
451 <!-- <span id="linkbar-west"> </span> -->
\r
452 <span id="linkbar-center">
\r
453 <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> •
\r
454 <a href="../www/mailing-list.html">Mailing Lists</a> •
\r
455 <a href="http://studio.webbyland.com/ImageMagick/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
\r
457 <span id="linkbar-east"> </span>
\r
459 <div class="footer">
\r
460 <span id="footer-west">© 1999-2009 ImageMagick Studio LLC</span>
\r
461 <span id="footer-east"> <a href="http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
\r
463 <div style="clear: both; margin: 0; width: 100%; "></div>
\r