blob: 35f2b15f57636451ab158c0b3825801152c874a2 [file] [log] [blame]
cristy3eaa0ef2010-03-06 20:35:26 +00001
cristydcca3fa2010-12-29 21:50:07 +00002<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
cristy2bd2a982011-02-15 00:52:58 +00004<html version="-//W3C//DTD XHTML 1.1//EN"
5 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
6 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7 xsi:schemaLocation="http://www.w3.org/1999/xhtml
8 http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
cristy3eaa0ef2010-03-06 20:35:26 +00009<head>
cristy751980d2012-06-03 23:18:35 +000010 <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
cristy1efc1ab2011-08-01 14:47:02 +000011 <meta name="google-site-verification" content="MxsMq6bdLOx0KSuz1MY6yG9ZTIJ7_7DVRfl5NCAT5Yg"/>
cristyffb69ed2010-12-25 00:06:48 +000012 <title>ImageMagick: MagickCore, Low-level C API for ImageMagick</title>
cristy751980d2012-06-03 23:18:35 +000013 <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"/>
cristydcca3fa2010-12-29 21:50:07 +000029 <link rel="icon" href="../images/wand.png"/>
cristy3c98a4f2010-08-13 20:09:41 +000030 <link rel="shortcut icon" href="../images/wand.ico" type="images/x-icon"/>
cristy29c5c992011-06-25 13:58:49 +000031 <link rel="canonical" href="http://www.imagemagick.org" />
cristy3c98a4f2010-08-13 20:09:41 +000032 <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
cristyeed6cb62012-01-28 19:38:34 +000033 <!-- Add jQuery library -->
34 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
35
36 <!-- Optionaly include easing and/or mousewheel plugins -->
37 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.easing-1.3.pack.js"></script>
38 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.mousewheel-3.0.6.pack.js"></script>
39
40 <!-- Add fancyBox -->
cristy751980d2012-06-03 23:18:35 +000041 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/jquery.fancybox.css?v=2.0.4" type="text/css" media="screen" />
42 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.fancybox.pack.js?v=2.0.4"></script>
cristyeed6cb62012-01-28 19:38:34 +000043
44 <!-- Optionaly include button and/or thumbnail helpers -->
cristy751980d2012-06-03 23:18:35 +000045 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.css?v=2.0.4" type="text/css" media="screen" />
46 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.js?v=2.0.4"></script>
cristyeed6cb62012-01-28 19:38:34 +000047
cristy751980d2012-06-03 23:18:35 +000048 <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.css?v=2.0.4" type="text/css" media="screen" />
49 <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.js?v=2.0.4"></script>
cristyeed6cb62012-01-28 19:38:34 +000050 <script type="text/javascript">
51 $(document).ready(function() {
52 $(".fancybox").fancybox();
53 });
54 </script>
55 <!-- ImageMagick style -->
cristy7a40ba82011-01-08 20:31:18 +000056 <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
cristy3c98a4f2010-08-13 20:09:41 +000057 <style type="text/css" media="all">
58 @import url("../www/magick.css");
59 </style>
cristy3eaa0ef2010-03-06 20:35:26 +000060</head>
61
62<body id="www-imagemagick-org">
63<div class="titlebar">
cristyb52981c2011-03-19 17:09:31 +000064<div style="margin: 17px auto; float: left;">
65 <script type="text/javascript">
66 <!--
67 google_ad_client = "pub-3129977114552745";
68 google_ad_slot = "5439289906";
69 google_ad_width = 728;
70 google_ad_height = 90;
71 //-->
72 </script>
73 <script type="text/javascript"
74 src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
75 </script>
76</div>
cristy751980d2012-06-03 23:18:35 +000077<a href="../discourse-server">
cristyaf8d6652011-02-04 21:57:45 +000078 <img src="../images/logo.jpg"
79 alt="ImageMagick Logo"
cristy178edaf2011-01-23 03:42:39 +000080 style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
cristy3eaa0ef2010-03-06 20:35:26 +000081<a href="../index.html">
cristyaf8d6652011-02-04 21:57:45 +000082 <img src="../images/sprite.jpg"
83 alt="ImageMagick Sprite"
cristy3eaa0ef2010-03-06 20:35:26 +000084 style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
85</div>
86
cristyce69bb02010-07-27 19:49:46 +000087<div class="westbar">
cristy3eaa0ef2010-03-06 20:35:26 +000088
cristy3ed852e2009-09-05 21:47:34 +000089<div class="menu">
cristy83a272e2010-05-07 20:40:35 +000090 <a title="About ImageMagick" href="../index.html">About ImageMagick</a>
cristy3ed852e2009-09-05 21:47:34 +000091</div>
cristy3ed852e2009-09-05 21:47:34 +000092<div class="menu">
cristy751980d2012-06-03 23:18:35 +000093 <a title="Binary Releases" href="binary-releases.html">Binary Releases</a>
cristybb503372010-05-27 20:51:26 +000094</div>
95<div class="sub">
cristy751980d2012-06-03 23:18:35 +000096 <a title="Binary Release: Unix" href="binary-releases.html#unix">Unix</a>
cristybb503372010-05-27 20:51:26 +000097</div>
98<div class="sub">
cristy751980d2012-06-03 23:18:35 +000099 <a title="Binary Release: MacOS X" href="binary-releases.html#macosx">Mac OS X</a>
cristybb503372010-05-27 20:51:26 +0000100</div>
101<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000102 <a title="Binary Release: iOS" href="binary-releases.html#iOS">iOS</a>
cristyda16f162011-02-19 23:52:17 +0000103</div>
104<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000105 <a title="Binary Release: Windows" href="binary-releases.html#windows">Windows</a>
cristybb503372010-05-27 20:51:26 +0000106</div>
107<div class="sep"></div>
108<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000109 <a title="Command-line Tools" href="command-line-tools.html">Command-line Tools</a>
cristy3ed852e2009-09-05 21:47:34 +0000110</div>
111<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000112 <a title="Command-line Tools: Processing" href="command-line-processing.html">Processing</a>
cristy3ed852e2009-09-05 21:47:34 +0000113</div>
114<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000115 <a title="Command-line Tools: Options" href="command-line-options.html">Options</a>
cristy3ed852e2009-09-05 21:47:34 +0000116</div>
117<div class="sub">
cristy83a272e2010-05-07 20:40:35 +0000118 <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
cristy3ed852e2009-09-05 21:47:34 +0000119</div>
120<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000121 <a title="Program Interfaces" href="api.html">Program Interfaces</a>
cristy3ed852e2009-09-05 21:47:34 +0000122</div>
123<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000124 <a title="Program Interface: MagickWand" href="magick-wand.html">MagickWand</a>
cristy3ed852e2009-09-05 21:47:34 +0000125</div>
126<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000127 <a title="Program Interface: MagickCore" href="magick-core.html">MagickCore</a>
cristy3ed852e2009-09-05 21:47:34 +0000128</div>
129<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000130 <a title="Program Interface: PerlMagick" href="perl-magick.html">PerlMagick</a>
cristy3ed852e2009-09-05 21:47:34 +0000131</div>
132<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000133 <a title="Program Interface: Magick++" href="magick++.html">Magick++</a>
cristy3ed852e2009-09-05 21:47:34 +0000134</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000135<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000136<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000137 <a title="Install from Source" href="install-source.html">Install from Source</a>
cristy3ed852e2009-09-05 21:47:34 +0000138</div>
139<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000140 <a title="Install from Source: Unix" href="install-source.html#unix">Unix</a>
cristy3ed852e2009-09-05 21:47:34 +0000141</div>
142<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000143 <a title="Install from Source: Windows" href="install-source.html#windows">Windows</a>
cristy3ed852e2009-09-05 21:47:34 +0000144 </div>
145<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000146 <a title="Resources" href="resources.html">Resources</a>
cristy3ed852e2009-09-05 21:47:34 +0000147</div>
cristybb503372010-05-27 20:51:26 +0000148<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000149 <a title="Architecture" href="architecture.html">Architecture</a>
cristybb503372010-05-27 20:51:26 +0000150</div>
cristy3ed852e2009-09-05 21:47:34 +0000151<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000152 <a title="Download" href="download.html">Download</a>
cristy3ed852e2009-09-05 21:47:34 +0000153</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000154<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000155<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000156 <a title="Search" href="search.html">Search</a>
cristy3ed852e2009-09-05 21:47:34 +0000157</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000158<div class="sep"></div>
cristy3ed852e2009-09-05 21:47:34 +0000159<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000160 <a title="Site Map" href="sitemap.html">Site Map</a>
cristy3ed852e2009-09-05 21:47:34 +0000161</div>
162<div class="sub">
cristy751980d2012-06-03 23:18:35 +0000163 <a title="Site Map: Links" href="links.html">Links</a>
cristy3ed852e2009-09-05 21:47:34 +0000164</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000165<div class="sep"></div>
cristyeed6cb62012-01-28 19:38:34 +0000166<div class="menu">
cristy751980d2012-06-03 23:18:35 +0000167 <a rel="follow" title="Sponsors" href="sponsors.html">Sponsors:</a>
cristy3ed852e2009-09-05 21:47:34 +0000168
cristyeed6cb62012-01-28 19:38:34 +0000169 <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>
cristy751980d2012-06-03 23:18:35 +0000170 <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><!-- 201208010120 mickey@163... -->
cristy3ed852e2009-09-05 21:47:34 +0000171<div class="sponsbox">
cristyeed6cb62012-01-28 19:38:34 +0000172<div class="sponsor">
cristy751980d2012-06-03 23:18:35 +0000173 <a rel="follow" title="Sponsor: The Fastest &amp; Easiest Way to Find Images" href="http://www.graphicsfactory.com">The Fastest &amp; Easiest Way to Find Images</a><!-- 201210010270 graphicsfac... -->
cristy81492d62011-06-07 16:41:42 +0000174</div>
cristyeed6cb62012-01-28 19:38:34 +0000175<div class="sponsor">
cristy751980d2012-06-03 23:18:35 +0000176 <a rel="follow" title="Sponsor: VPS" href="http://www.interdominios.com/vps">VPS</a><!-- 201209010090 barsh@inter... -->
cristy1efc1ab2011-08-01 14:47:02 +0000177</div>
cristyeed6cb62012-01-28 19:38:34 +0000178<div class="sponsor">
cristy751980d2012-06-03 23:18:35 +0000179 <a rel="follow" title="Werbebanner Werbeplane" href="http://www.allesbanner.de">Werbebanner Werbeplane</a><!-- 201212010450 info@druck... -->
180</div>
181<div class="sponsor">
182 <a rel="follow" title="Entertainment News &amp; Photos" href="http://www.zimbio.com">Entertainment News &amp; Photos</a><!-- 201211010540 bd@zimb... -->
183</div>
184<div class="sponsor">
185 <a rel="follow" title="Sponsor: LED24" href="http://led24.de/">LED24</a><!-- 201207010270 info@led24... -->
186</div>
187<div class="sponsor">
188 <a rel="follow" title="Sponsor: Best Website Hosting" href="http://www.top-cheap-web-hosting.com">Best Website Hosting</a><!-- 201304010090 eunge.liu-->
189</div>
190<div class="sponsor">
191 <a rel="follow" title="Android Tablet" href="http://www.dinodirect.com/ipads-tablets/">Android Tablet</a><!-- 201208010120 mickey@163... -->
cristy84134182011-06-15 22:59:00 +0000192</div>
cristyeed6cb62012-01-28 19:38:34 +0000193<div class="sponsor">
194 <a rel="follow" title="Sponsor: Web Site Hosting" href="http://webhostinggeeks.com">Web Site Hosting</a><!-- 201302010900 funds@enmob... -->
cristy81492d62011-06-07 16:41:42 +0000195</div>
cristyeed6cb62012-01-28 19:38:34 +0000196<div class="sponsor">
cristyeed6cb62012-01-28 19:38:34 +0000197 <a rel="follow" title="Sponsor: Premium Quality Stock Photos" href="http://www.f1online.pro/en/">Premium Quality Stock Photos</a><!-- 2012080100540 ... -->
198</div>
199<div class="sponsor">
cristyeed6cb62012-01-28 19:38:34 +0000200 <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 2012070100250 ... -->
201</div>
202<div class="sponsor">
203 <a rel="follow" title="Sponsor: Managed Server" href="http://www.robhost.de">Managed Server</a><!-- 201210010720 klikics... -->
204</div>
205<div class="sponsor">
cristy10549a12011-05-15 19:04:46 +0000206 <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
cristy4c54bbb2011-03-17 13:53:13 +0000207</div>
cristyeed6cb62012-01-28 19:38:34 +0000208<div class="sponsor">
209 <a rel="follow" title="Sponsor: Free Catalogs" href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 20120801000600 -->
cristy4bf6e232011-05-21 01:43:33 +0000210</div>
cristyeed6cb62012-01-28 19:38:34 +0000211<div class="sponsor">
cristy751980d2012-06-03 23:18:35 +0000212 <a rel="follow" title="Sponsor: Fototapete - Tapetendruck" href="http://www.druck-expert.com/Fototapete-Tapetendruck,category,8830.html">Fototapete - Tapetendruck</a><!-- 2012100100155 info@druck-->
cristyec6b4752011-01-08 03:16:23 +0000213</div>
cristy3ed852e2009-09-05 21:47:34 +0000214</div>
215</div>
cristyce69bb02010-07-27 19:49:46 +0000216</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000217
cristyce69bb02010-07-27 19:49:46 +0000218<div class="eastbar">
cristy751980d2012-06-03 23:18:35 +0000219 <div class="g-plusone" id="gplusone"></div>
cristyeed6cb62012-01-28 19:38:34 +0000220 <script type="text/javascript">
221 window.___gcfg = {
222 lang: 'en-US'
223 };
224
225 (function() {
cristy751980d2012-06-03 23:18:35 +0000226 var po = document.createElement('script');
227 po.type = 'text/javascript'; po.async = true;
cristyeed6cb62012-01-28 19:38:34 +0000228 po.src = 'https://apis.google.com/js/plusone.js';
cristy751980d2012-06-03 23:18:35 +0000229 var script = document.getElementsByTagName('script')[0];
230 script.parentNode.insertBefore(po, script);
cristyeed6cb62012-01-28 19:38:34 +0000231 })();
cristy751980d2012-06-03 23:18:35 +0000232 var gplusone = document.getElementById("gplusone");
233 gplusone.setAttribute("data-size","medium");
234 gplusone.setAttribute("data-count","false");
cristyeed6cb62012-01-28 19:38:34 +0000235 </script>
cristy29c5c992011-06-25 13:58:49 +0000236</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000237
238<div class="main">
239
cristydcca3fa2010-12-29 21:50:07 +0000240<h1>MagickCore C API</h1>
241
242<div class="doc-section">
cristy3ed852e2009-09-05 21:47:34 +0000243
cristy751980d2012-06-03 23:18:35 +0000244<p>The <a href="http://www.imagemagick.org/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="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>
cristy3ed852e2009-09-05 21:47:34 +0000245
246<ul>
247 <li><a href="../www/api/magick.html">Initialize or Destroy the ImageMagick Environment</a></li>
248 <li><a href="../www/api/constitute.html">Constitute an Image</a></li>
249 <li><a href="../www/api/composite.html">Composite an Image</a></li>
250 <li><a href="../www/api/image.html">Image Methods</a></li>
251 <li><a href="../www/api/color.html">Count the Colors in an Image</a></li>
cristy43d0f4d2009-09-17 19:35:37 +0000252 <li><a href="../www/api/colormap.html">Colormap Methods</a></li>
cristy3ed852e2009-09-05 21:47:34 +0000253 <li><a href="../www/api/distort.html">Image Distortions</a></li>
254 <li><a href="../www/api/layer.html">Dealing with Image Layers</a></li>
255 <li><a href="../www/api/profile.html">Dealing with Image Profiles</a></li>
256 <li><a href="../www/api/quantize.html">Reduce the Number of Unique Colors in an Image</a></li>
257 <li><a href="../www/api/histogram.html">Image Histograms</a></li>
258 <li><a href="../www/api/segment.html">Segment an Image with Thresholding Fuzzy c-Means</a></li>
259 <li><a href="../www/api/resize.html">Resize an Image</a></li>
260 <li><a href="../www/api/transform.html">Transform an Image</a></li>
261 <li><a href="../www/api/shear.html">Shear or Rotate an Image by an Arbitrary Angle</a></li>
262 <li><a href="../www/api/enhance.html">Enhance an Image</a></li>
263 <li><a href="../www/api/effect.html">Add an Effect</a></li>
cristyd43a46b2010-01-21 02:13:41 +0000264 <li><a href="../www/api/morphology.html">Morphological Erosions, Dilations, Openings, and Closings</a></li>
cristy3ed852e2009-09-05 21:47:34 +0000265 <li><a href="../www/api/fx.html">Add a Special Effect</a></li>
266 <li><a href="../www/api/decorate.html">Decorate an Image</a></li>
cristy83543962009-10-16 19:04:28 +0000267 <li><a href="../www/api/attribute.html">Get/Set an Image Attribute</a></li>
cristy3ed852e2009-09-05 21:47:34 +0000268 <li><a href="../www/api/property.html">Get/Set Image Properties</a></li>
cristy3e2860c2010-01-24 01:36:30 +0000269 <li><a href="../www/api/statistic.html">Get Image Statistics</a></li>
270 <li><a href="../www/api/feature.html">Get Image Features</a></li>
cristy3ed852e2009-09-05 21:47:34 +0000271 <li><a href="../www/api/annotate.html">Annotate an Image</a></li>
272 <li><a href="../www/api/paint.html">Paint on an Image</a></li>
273 <li><a href="../www/api/draw.html">Draw on an Image</a></li>
274 <li><a href="../www/api/montage.html">Create an Image Thumbnail</a></li>
275 <li><a href="../www/api/fourier.html">Compute the discrete Fourier transform (DFT)</a></li>
276 <li><a href="../www/api/compare.html">Compare an Image to a Reconstructed Image</a></li>
277 <li><a href="../www/api/display.html">Interactively Display and Edit an Image</a></li>
278 <li><a href="../www/api/animate.html">Interactively Animate an Image Sequence</a></li>
279 <li><a href="../www/api/cipher.html">Convert to and from Cipher Pixels</a></li>
280 <li><a href="../www/api/list.html">Working with Image Lists</a></li>
cristy10c87152010-06-26 16:12:21 +0000281 <li><a href="../www/api/image-view.html">Image View Methods</a></li>
cristy3ed852e2009-09-05 21:47:34 +0000282 <li><a href="../www/api/cache.html">Get or Set Image Pixels</a></li>
283 <li><a href="../www/api/cache-view.html">Working with Cache Views</a></li>
284 <li><a href="../www/api/stream.html">The Pixel FIFO</a></li>
285 <li><a href="../www/api/blob.html">Read or Write Binary Large OBjects</a></li>
286 <li><a href="../www/api/module.html">Loadable Modules</a></li>
287 <li><a href="../www/api/signature.html">Compute a Message Digest for an Image</a></li>
288 <li><a href="../www/api/registry.html">The Image Registry</a></li>
289 <li><a href="../www/api/exception.html">Dealing with Exceptions</a></li>
290 <li><a href="../www/api/memory.html">Memory Allocation</a></li>
291 <li><a href="../www/api/resource.html">Monitor or Limit Resource Consumption</a></li>
292 <li><a href="../www/api/monitor.html">Monitor the Progress of an Image Operation</a></li>
293 <li><a href="../www/api/version.html">Get the Version and Copyrights</a></li>
294 <li><a href="../www/api/deprecate.html">Deprecated Methods</a></li>
cristy751980d2012-06-03 23:18:35 +0000295 <li><a href="exception.html">Error and Warning Codes</a></li>
cristy3ed852e2009-09-05 21:47:34 +0000296</ul>
297
298<p>After you write your MagickCore program, compile it like this:</p>
299
cristyeed6cb62012-01-28 19:38:34 +0000300<p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>cc -o core `pkg-config --cflags --libs MagickCore` core.c</span></p>
301<p>Set the <kbd>PKG_CONFIG_PATH</kbd> environment variable if ImageMagick is not in your default system path:</p>
302<p class='crt'><span class="crtprompt"> $ </span><span class='crtin'>export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig</span></p>
cristy3ed852e2009-09-05 21:47:34 +0000303<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>
304
305<div class="viewport">
cristy3ed852e2009-09-05 21:47:34 +0000306 #include &lt;stdio.h>
307 #include &lt;stdlib.h>
308 #include &lt;string.h>
309 #include &lt;time.h>
310 #include &lt;magick/MagickCore.h>
311
312 int main(int argc,char **argv)
313 {
314 ExceptionInfo
315 *exception;
316
317 Image
318 *image,
319 *images,
320 *resize_image,
321 *thumbnails;
322
323 ImageInfo
324 *image_info;
325
326 if (argc != 3)
327 {
328 (void) fprintf(stdout,"Usage: %s image thumbnail\n",argv[0]);
329 exit(0);
330 }
331 /*
332 Initialize the image info structure and read an image.
333 */
334 MagickCoreGenesis(*argv,MagickTrue);
335 exception=AcquireExceptionInfo();
336 image_info=CloneImageInfo((ImageInfo *) NULL);
337 (void) strcpy(image_info-&gt;filename,argv[1]);
338 images=ReadImage(image_info,exception);
339 if (exception-&gt;severity != UndefinedException)
340 CatchException(exception);
341 if (images == (Image *) NULL)
342 exit(1);
343 /*
344 Convert the image to a thumbnail.
345 */
346 thumbnails=NewImageList();
347 while ((image=RemoveFirstImageFromList(&amp;images)) != (Image *) NULL)
348 {
349 resize_image=ResizeImage(image,106,80,LanczosFilter,1.0,exception);
350 if (resize_image == (Image *) NULL)
351 MagickError(exception-&gt;severity,exception-&gt;reason,exception-&gt;description);
352 (void) AppendImageToList(&amp;thumbnails,resize_image);
353 DestroyImage(image);
354 }
355 /*
356 Write the image thumbnail.
357 */
358 (void) strcpy(thumbnails-&gt;filename,argv[2]);
359 WriteImage(image_info,thumbnails);
360 /*
361 Destroy the image thumbnail and exit.
362 */
363 thumbnails=DestroyImageList(thumbnails);
364 image_info=DestroyImageInfo(image_info);
365 exception=DestroyExceptionInfo(exception);
366 MagickCoreTerminus();
367 return(0);
368 }
cristy3ed852e2009-09-05 21:47:34 +0000369</div>
cristydcca3fa2010-12-29 21:50:07 +0000370<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>
cristy10c87152010-06-26 16:12:21 +0000371
372<div class="viewport">
cristy10c87152010-06-26 16:12:21 +0000373#include &lt;stdio.h>
374#include &lt;stdlib.h>
375#include &lt;math.h>
cristy73b7d4c2010-06-27 00:31:00 +0000376#include &lt;magick/MagickCore.h>
cristy10c87152010-06-26 16:12:21 +0000377
cristy73b7d4c2010-06-27 00:31:00 +0000378static MagickBooleanType SigmoidalContrast(ImageView *contrast_view,
cristyc3ebda22010-06-27 17:11:57 +0000379 const ssize_t y,const int id,void *context)
cristy10c87152010-06-26 16:12:21 +0000380{
381#define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
382#define SigmoidalContrast(x) \
383 (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)
384
cristyc3ebda22010-06-27 17:11:57 +0000385 RectangleInfo
386 extent;
387
cristy73b7d4c2010-06-27 00:31:00 +0000388 register IndexPacket
389 *indexes;
cristy10c87152010-06-26 16:12:21 +0000390
cristy73b7d4c2010-06-27 00:31:00 +0000391 register PixelPacket
392 *pixels;
cristy10c87152010-06-26 16:12:21 +0000393
cristy73b7d4c2010-06-27 00:31:00 +0000394 register ssize_t
cristy10c87152010-06-26 16:12:21 +0000395 x;
396
cristyc3ebda22010-06-27 17:11:57 +0000397 extent=GetImageViewExtent(contrast_view);
cristy73b7d4c2010-06-27 00:31:00 +0000398 pixels=GetImageViewAuthenticPixels(contrast_view);
cristyc3ebda22010-06-27 17:11:57 +0000399 for (x=0; x &lt; (ssize_t) (extent.width-extent.x); x++)
cristy10c87152010-06-26 16:12:21 +0000400 {
cristy29c5c992011-06-25 13:58:49 +0000401 SetPixelRed(pixels,RoundToQuantum(SigmoidalContrast(GetPixelRed(pixels)));
402 SetPixelGreen(pixels,RoundToQuantum(SigmoidalContrast(GetPixelGreen(pixels)));
403 SetPixelBlue(pixels,RoundToQuantum(SigmoidalContrast(GetPixelBlue(pixels)));
404 SetPixelOpacity(pixels,RoundToQuantum(SigmoidalContrast(GetPixelOpacity(pixels)));
cristyacc04882011-05-04 23:03:43 +0000405 pixels++;
cristy10c87152010-06-26 16:12:21 +0000406 }
cristy73b7d4c2010-06-27 00:31:00 +0000407 indexes=GetImageViewAuthenticIndexes(contrast_view);
408 if (indexes != (IndexPacket *) NULL)
cristyc3ebda22010-06-27 17:11:57 +0000409 for (x=0; x &lt; (ssize_t) (extent.width-extent.x); x++)
cristy29c5c992011-06-25 13:58:49 +0000410 SetPixelIndex(indexes+x,RoundToQuantum(SigmoidalContrast(GetPixelIndex(indexes+x))));
cristy10c87152010-06-26 16:12:21 +0000411 return(MagickTrue);
412}
413
414int main(int argc,char **argv)
415{
416#define ThrowImageException(image) \
417{ \
cristy10c87152010-06-26 16:12:21 +0000418 \
cristy73b7d4c2010-06-27 00:31:00 +0000419 CatchException(exception); \
420 if (contrast_image != (Image *) NULL) \
421 contrast_image=DestroyImage(contrast_image); \
cristyc3ebda22010-06-27 17:11:57 +0000422 exit(-1); \
423}
424#define ThrowViewException(view) \
425{ \
426 char \
427 *description; \
428 \
429 ExceptionType \
430 severity; \
431 \
cristydcca3fa2010-12-29 21:50:07 +0000432 description=GetImageViewException(view,&amp;severity); \
cristyc3ebda22010-06-27 17:11:57 +0000433 (void) fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description); \
434 description=DestroyString(description); \
cristy10c87152010-06-26 16:12:21 +0000435 exit(-1); \
436}
437
cristy73b7d4c2010-06-27 00:31:00 +0000438 ExceptionInfo
439 *exception;
440
441 Image
442 *contrast_image;
443
444 ImageInfo
445 *image_info;
446
cristy10c87152010-06-26 16:12:21 +0000447 ImageView
448 *contrast_view;
449
450 MagickBooleanType
451 status;
452
cristy10c87152010-06-26 16:12:21 +0000453 if (argc != 3)
454 {
455 (void) fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
456 exit(0);
457 }
458 /*
459 Read an image.
460 */
cristy73b7d4c2010-06-27 00:31:00 +0000461 MagickCoreGenesis(*argv,MagickTrue);
462 image_info=AcquireImageInfo();
463 (void) CopyMagickString(image_info->filename,argv[1],MaxTextExtent);
464 exception=AcquireExceptionInfo();
465 contrast_image=ReadImage(image_info,exception);
466 if (contrast_image == (Image *) NULL)
467 ThrowImageException(contrast_image);
cristy10c87152010-06-26 16:12:21 +0000468 /*
469 Sigmoidal non-linearity contrast control.
470 */
471 contrast_view=NewImageView(contrast_image);
472 if (contrast_view == (ImageView *) NULL)
cristy73b7d4c2010-06-27 00:31:00 +0000473 ThrowImageException(contrast_image);
cristy10c87152010-06-26 16:12:21 +0000474 status=UpdateImageViewIterator(contrast_view,SigmoidalContrast,(void *) NULL);
475 if (status == MagickFalse)
cristy73b7d4c2010-06-27 00:31:00 +0000476 ThrowImageException(contrast_image);
cristy10c87152010-06-26 16:12:21 +0000477 contrast_view=DestroyImageView(contrast_view);
478 /*
479 Write the image then destroy it.
480 */
cristy73b7d4c2010-06-27 00:31:00 +0000481 status=WriteImages(image_info,contrast_image,argv[2],exception);
cristy10c87152010-06-26 16:12:21 +0000482 if (status == MagickFalse)
cristy73b7d4c2010-06-27 00:31:00 +0000483 ThrowImageException(contrast_image);
484 contrast_image=DestroyImage(contrast_image);
485 exception=DestroyExceptionInfo(exception);
486 image_info=DestroyImageInfo(image_info);
cristy10c87152010-06-26 16:12:21 +0000487 MagickCoreTerminus();
488 return(0);
489}
cristy10c87152010-06-26 16:12:21 +0000490</div>
cristydcca3fa2010-12-29 21:50:07 +0000491</div>
cristy3eaa0ef2010-03-06 20:35:26 +0000492
493</div>
494
495<div id="linkbar">
cristyce69bb02010-07-27 19:49:46 +0000496 <span id="linkbar-west">&nbsp;</span>
cristy3eaa0ef2010-03-06 20:35:26 +0000497 <span id="linkbar-center">
cristy751980d2012-06-03 23:18:35 +0000498 <a href="../discourse-server">Discourse Server</a> &bull;
cristya8902942010-07-30 00:49:52 +0000499 <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
cristy3eaa0ef2010-03-06 20:35:26 +0000500 </span>
501 <span id="linkbar-east">&nbsp;</span>
502 </div>
503 <div class="footer">
cristy751980d2012-06-03 23:18:35 +0000504 <span id="footer-west">&copy; 1999-2012 ImageMagick Studio LLC</span>
505 <span id="footer-east"> <a href="contact.html">Contact the Wizards</a></span>
cristy3eaa0ef2010-03-06 20:35:26 +0000506 </div>
507 <div style="clear: both; margin: 0; width: 100%; "></div>
cristya8902942010-07-30 00:49:52 +0000508 <script type="text/javascript">
509 var _gaq = _gaq || [];
510 _gaq.push(['_setAccount', 'UA-17690367-1']);
511 _gaq.push(['_trackPageview']);
512
513 (function() {
514 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
515 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
516 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
517 })();
518 </script>
cristy3eaa0ef2010-03-06 20:35:26 +0000519</body>
520</html>