<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html version="-//W3C//DTD XHTML 1.1//EN"
      xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml
                          http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U="/>
  <title>ImageMagick: MagickWand, C API for ImageMagick: Property Methods</title>
  <meta http-equiv="Content-Language" content="en-US"/>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
  <meta name="Application-name" content="ImageMagick"/>
  <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."/>
  <meta name="Application-url" content="http://www.imagemagick.org"/>
  <meta name="Generator" content="PHP"/>
  <meta name="Keywords" content="magickwc, api, for, imagemagick:, property, methods, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Image, Processing, Automagically"/>
  <meta name="Rating" content="GENERAL"/>
  <meta name="Robots" content="INDEX, FOLLOW"/>
  <meta name="Generator" content="ImageMagick Studio LLC"/>
  <meta name="Author" content="ImageMagick Studio LLC"/>
  <meta name="Revisit-after" content="2 DAYS"/>
  <meta name="Resource-type" content="document"/>
  <meta name="Copyright" content="Copyright (c) 1999-2011 ImageMagick Studio LLC"/>
  <meta name="Distribution" content="Global"/>
  <link rel="icon" href="../../images/wand.png"/>
  <link rel="shortcut icon" href="../../images/wand.ico"  type="images/x-icon"/>
  <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
  <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
  <style type="text/css" media="all">
    @import url("../../www/magick.css");
  </style>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script type="text/javascript" src="../fancybox/jquery.fancybox-1.3.4.pack.js"></script>
  <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" media="screen" />
  <script type="text/javascript">
    $(document).ready(function() {
      $("a[href$=.jpg],a[href$=.png],a[href$=.gif]").fancybox({
        'transitionIn'  : 'elastic',
        'transitionOut' : 'elastic',
        'overlayShow'   : false,
        'opacity'       : true
      });
    });
  </script>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<div style="margin: 17px auto; float: left;">
  <script type="text/javascript">
  <!--
    google_ad_client = "pub-3129977114552745";
    google_ad_slot = "5439289906";
    google_ad_width = 728;
    google_ad_height = 90;
  //-->
  </script>
  <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  </script>
</div>
<a href="http://www.imagemagick.org/discourse-server/">
  <img src="../../images/logo.jpg"
  alt="ImageMagick Logo"
  style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
<a href="../../index.html">
  <img src="../../images/sprite.jpg"
  alt="ImageMagick Sprite"
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
</div>

<div class="westbar">

<div class="menu">
  <a title="About ImageMagick" href="../../index.html">About ImageMagick</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Binary Releases" href="../../www/binary-releases.html">Binary Releases</a>
</div>
<div class="sub">
    <a title="Binary Release: Unix" href="../../www/binary-releases.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Binary Release: MacOS X" href="../../www/binary-releases.html#macosx">Mac OS X</a>
</div>
<div class="sub">
    <a title="Binary Release: iOS" href="../../www/binary-releases.html#iOS">iOS</a>
</div>
<div class="sub">
    <a title="Binary Release: Windows" href="../../www/binary-releases.html#windows">Windows</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Command-line Tools" href="../../www/command-line-tools.html">Command-line Tools</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Processing" href="../../www/command-line-processing.html">Processing</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Options" href="../../www/command-line-options.html">Options</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
</div>
<div class="menu">
  <a title="Program Interfaces" href="../../www/api.html">Program Interfaces</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickWand" href="../../www/magick-wand.html">MagickWand</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickCore" href="../../www/magick-core.html">MagickCore</a>
</div>
<div class="sub">
    <a title="Program Interface: PerlMagick" href="../../www/perl-magick.html">PerlMagick</a>
</div>
<div class="sub">
    <a title="Program Interface: Magick++" href="../../www/magick++.html">Magick++</a>
</div>
<div class="sep"></div>
<div  class="menu">
   <a title="Install from Source" href="../../www/install-source.html">Install from Source</a>
</div>
<div class="sub">
    <a title="Install from Source: Unix" href="../../www/install-source.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Install from Source: Windows" href="../../www/install-source.html#windows">Windows</a>
 </div>
<div class="menu">
  <a title="Resources" href="../../www/resources.html">Resources</a>
</div>
<div class="menu">
  <a title="Architecture" href="../../www/architecture.html">Architecture</a>
</div>
<div class="menu">
  <a title="Download" href="../../www/download.html">Download</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Search" href="../../www/search.html">Search</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Site Map" href="../../www/sitemap.html">Site Map</a>
</div>
<div  class="sub">
  <a title="Site Map: Links" href="../../www/links.html">Links</a>
</div>
<div class="sep"></div>
<div  class="menu">
  <a rel="follow" title="Sponsors" href="../../www/sponsors.html">Sponsors:</a>

<a href="http://www.networkredux.com">
  <img src="../../images/networkredux.png" alt="[sponsor]"
  style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a>
<div class="sponsbox">
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting" href="http://www.micfo.com">Web Hosting</a><!-- 209901010090s golestan -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Deals" href="http://www.webhostingdeals.org">Web Hosting Deals</a><!-- 201111010270 chee.hoa darin -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingsecretrevealed.com">Web Hosting Secret Revealed</a><!-- 201204010540 iamchee jerry -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Break" href="http://www.webhostingbreak.com">Web Hosting Break</a><!-- 201109010090 ian@ian-m... -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Website Hosting" href="http://www.hostreviewgeeks.com">Website Hosting</a><!-- 201110010090 alexanian media -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Hotel München" href="http://www.messehotel-erb-muenchen.de">Hotel München</a><!-- 201111010450 cerb -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Best Web Hosting" href="http://webhostinggeeks.com">Best Web Hosting</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingmasters.com">Web Hosting Reviews</a><!-- 201107011500 affliatelabel -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
   <a rel="follow" title="Kaffeevollautomaten Reparatur Kundendienst Berlin" href="http://www.kaffeemaschinen-center.de">Kaffeevollautomaten Reparatur Berlin</a><!-- 2011090100025 c.karule-->
</div>
</div>
</div>
</div>

<div class="eastbar">

</div>

<div class="main">

<h1>Module magick-property Methods</h1>
<p class="navigation-index">[<a href="#MagickDeleteImageArtifact">MagickDeleteImageArtifact</a> &bull; <a href="#MagickDeleteImageProperty">MagickDeleteImageProperty</a> &bull; <a href="#MagickDeleteOption">MagickDeleteOption</a> &bull; <a href="#MagickGetAntialias">MagickGetAntialias</a> &bull; <a href="#MagickGetBackgroundColor">MagickGetBackgroundColor</a> &bull; <a href="#MagickGetColorspace">MagickGetColorspace</a> &bull; <a href="#MagickGetCompression">MagickGetCompression</a> &bull; <a href="#MagickGetCompressionQuality">MagickGetCompressionQuality</a> &bull; <a href="#MagickGetCopyright">MagickGetCopyright</a> &bull; <a href="#MagickGetFilename">MagickGetFilename</a> &bull; <a href="#MagickGetFont">MagickGetFont</a> &bull; <a href="#MagickGetFormat">MagickGetFormat</a> &bull; <a href="#MagickGetGravity">MagickGetGravity</a> &bull; <a href="#MagickGetHomeURL">MagickGetHomeURL</a> &bull; <a href="#MagickGetImageArtifact">MagickGetImageArtifact</a> &bull; <a href="#MagickGetImageArtifacts">MagickGetImageArtifacts</a> &bull; <a href="#MagickGetImageProfile">MagickGetImageProfile</a> &bull; <a href="#MagickGetImageProfiles">MagickGetImageProfiles</a> &bull; <a href="#MagickGetImageProperty">MagickGetImageProperty</a> &bull; <a href="#MagickGetImageProperties">MagickGetImageProperties</a> &bull; <a href="#MagickGetInterlaceScheme">MagickGetInterlaceScheme</a> &bull; <a href="#MagickGetInterpolateMethod">MagickGetInterpolateMethod</a> &bull; <a href="#MagickGetOption">MagickGetOption</a> &bull; <a href="#MagickGetOptions">MagickGetOptions</a> &bull; <a href="#MagickGetOrientation">MagickGetOrientation</a> &bull; <a href="#MagickGetPackageName">MagickGetPackageName</a> &bull; <a href="#MagickGetPage">MagickGetPage</a> &bull; <a href="#MagickGetPointsize">MagickGetPointsize</a> &bull; <a href="#MagickGetQuantumDepth">MagickGetQuantumDepth</a> &bull; <a href="#MagickGetQuantumRange">MagickGetQuantumRange</a> &bull; <a href="#MagickGetReleaseDate">MagickGetReleaseDate</a> &bull; <a href="#MagickGetResolution">MagickGetResolution</a> &bull; <a href="#MagickGetResource">MagickGetResource</a> &bull; <a href="#MagickGetResourceLimit">MagickGetResourceLimit</a> &bull; <a href="#MagickGetSamplingFactors">MagickGetSamplingFactors</a> &bull; <a href="#MagickGetSize">MagickGetSize</a> &bull; <a href="#MagickGetSizeOffset">MagickGetSizeOffset</a> &bull; <a href="#MagickGetType">MagickGetType</a> &bull; <a href="#MagickGetVersion">MagickGetVersion</a> &bull; <a href="#MagickProfileImage">MagickProfileImage</a> &bull; <a href="#MagickRemoveImageProfile">MagickRemoveImageProfile</a> &bull; <a href="#MagickSetAntialias">MagickSetAntialias</a> &bull; <a href="#MagickSetBackgroundColor">MagickSetBackgroundColor</a> &bull; <a href="#MagickSetColorspace">MagickSetColorspace</a> &bull; <a href="#MagickSetCompression">MagickSetCompression</a> &bull; <a href="#MagickSetCompressionQuality">MagickSetCompressionQuality</a> &bull; <a href="#MagickSetDepth">MagickSetDepth</a> &bull; <a href="#MagickSetExtract">MagickSetExtract</a> &bull; <a href="#MagickSetFilename">MagickSetFilename</a> &bull; <a href="#MagickSetFont">MagickSetFont</a> &bull; <a href="#MagickSetFormat">MagickSetFormat</a> &bull; <a href="#MagickSetGravity">MagickSetGravity</a> &bull; <a href="#MagickSetImageArtifact">MagickSetImageArtifact</a> &bull; <a href="#MagickSetImageProfile">MagickSetImageProfile</a> &bull; <a href="#MagickSetImageProperty">MagickSetImageProperty</a> &bull; <a href="#MagickSetInterlaceScheme">MagickSetInterlaceScheme</a> &bull; <a href="#MagickSetInterpolateMethod">MagickSetInterpolateMethod</a> &bull; <a href="#MagickSetOption">MagickSetOption</a> &bull; <a href="#MagickSetOrientation">MagickSetOrientation</a> &bull; <a href="#MagickSetPage">MagickSetPage</a> &bull; <a href="#MagickSetPassphrase">MagickSetPassphrase</a> &bull; <a href="#MagickSetPointsize">MagickSetPointsize</a> &bull; <a href="#MagickSetProgressMonitor">MagickSetProgressMonitor</a> &bull; <a href="#MagickSetResourceLimit">MagickSetResourceLimit</a> &bull; <a href="#MagickSetResolution">MagickSetResolution</a> &bull; <a href="#MagickSetSamplingFactors">MagickSetSamplingFactors</a> &bull; <a href="#MagickSetSize">MagickSetSize</a> &bull; <a href="#MagickSetSizeOffset">MagickSetSizeOffset</a> &bull; <a href="#MagickSetType">MagickSetType</a>]</p>

<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickDeleteImageArtifact">MagickDeleteImageArtifact</a></h2>
<div class="doc-section">

<p>MagickDeleteImageArtifact() deletes a wand artifact.</p>

<p>The format of the MagickDeleteImageArtifact method is:</p>

<pre class="code">
  MagickBooleanType MagickDeleteImageArtifact(MagickWand *wand,
    const char *artifact)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>artifact</h5>
<p>the image artifact.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickDeleteImageProperty">MagickDeleteImageProperty</a></h2>
<div class="doc-section">

<p>MagickDeleteImageProperty() deletes a wand property.</p>

<p>The format of the MagickDeleteImageProperty method is:</p>

<pre class="code">
  MagickBooleanType MagickDeleteImageProperty(MagickWand *wand,
    const char *property)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>property</h5>
<p>the image property.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickDeleteOption">MagickDeleteOption</a></h2>
<div class="doc-section">

<p>MagickDeleteOption() deletes a wand option.</p>

<p>The format of the MagickDeleteOption method is:</p>

<pre class="code">
  MagickBooleanType MagickDeleteOption(MagickWand *wand,
    const char *option)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>option</h5>
<p>the image option.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetAntialias">MagickGetAntialias</a></h2>
<div class="doc-section">

<p>MagickGetAntialias() returns the antialias property associated with the wand.</p>

<p>The format of the MagickGetAntialias method is:</p>

<pre class="code">
  MagickBooleanType MagickGetAntialias(const MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetBackgroundColor">MagickGetBackgroundColor</a></h2>
<div class="doc-section">

<p>MagickGetBackgroundColor() returns the wand background color.</p>

<p>The format of the MagickGetBackgroundColor method is:</p>

<pre class="code">
  PixelWand *MagickGetBackgroundColor(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetColorspace">MagickGetColorspace</a></h2>
<div class="doc-section">

<p>MagickGetColorspace() gets the wand colorspace type.</p>

<p>The format of the MagickGetColorspace method is:</p>

<pre class="code">
  ColorspaceType MagickGetColorspace(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetCompression">MagickGetCompression</a></h2>
<div class="doc-section">

<p>MagickGetCompression() gets the wand compression type.</p>

<p>The format of the MagickGetCompression method is:</p>

<pre class="code">
  CompressionType MagickGetCompression(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetCompressionQuality">MagickGetCompressionQuality</a></h2>
<div class="doc-section">

<p>MagickGetCompressionQuality() gets the wand compression quality.</p>

<p>The format of the MagickGetCompressionQuality method is:</p>

<pre class="code">
  size_t MagickGetCompressionQuality(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetCopyright">MagickGetCopyright</a></h2>
<div class="doc-section">

<p>MagickGetCopyright() returns the ImageMagick API copyright as a string constant.</p>

<p>The format of the MagickGetCopyright method is:</p>

<pre class="code">
  const char *MagickGetCopyright(void)
</pre>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetFilename">MagickGetFilename</a></h2>
<div class="doc-section">

<p>MagickGetFilename() returns the filename associated with an image sequence.</p>

<p>The format of the MagickGetFilename method is:</p>

<pre class="code">
  const char *MagickGetFilename(const MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetFont">MagickGetFont</a></h2>
<div class="doc-section">

<p>MagickGetFont() returns the font associated with the MagickWand.</p>

<p>The format of the MagickGetFont method is:</p>

<pre class="code">
  char *MagickGetFont(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetFormat">MagickGetFormat</a></h2>
<div class="doc-section">

<p>MagickGetFormat() returns the format of the magick wand.</p>

<p>The format of the MagickGetFormat method is:</p>

<pre class="code">
  const char MagickGetFormat(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetGravity">MagickGetGravity</a></h2>
<div class="doc-section">

<p>MagickGetGravity() gets the wand gravity.</p>

<p>The format of the MagickGetGravity method is:</p>

<pre class="code">
  GravityType MagickGetGravity(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetHomeURL">MagickGetHomeURL</a></h2>
<div class="doc-section">

<p>MagickGetHomeURL() returns the ImageMagick home URL.</p>

<p>The format of the MagickGetHomeURL method is:</p>

<pre class="code">
  char *MagickGetHomeURL(void)
</pre>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetImageArtifact">MagickGetImageArtifact</a></h2>
<div class="doc-section">

<p>MagickGetImageArtifact() returns a value associated with the specified artifact.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetImageArtifact method is:</p>

<pre class="code">
  char *MagickGetImageArtifact(MagickWand *wand,const char *artifact)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>artifact</h5>
<p>the artifact.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetImageArtifacts">MagickGetImageArtifacts</a></h2>
<div class="doc-section">

<p>MagickGetImageArtifacts() returns all the artifact names that match the specified pattern associated with a wand.  Use MagickGetImageProperty() to return the value of a particular artifact.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetImageArtifacts method is:</p>

<pre class="code">
  char *MagickGetImageArtifacts(MagickWand *wand,
    const char *pattern,size_t *number_artifacts)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>pattern</h5>
<p>Specifies a pointer to a text string containing a pattern.</p>

<h5>number_artifacts</h5>
<p>the number artifacts associated with this wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetImageProfile">MagickGetImageProfile</a></h2>
<div class="doc-section">

<p>MagickGetImageProfile() returns the named image profile.</p>

<p>The format of the MagickGetImageProfile method is:</p>

<pre class="code">
  unsigned char *MagickGetImageProfile(MagickWand *wand,const char *name,
    size_t *length)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>name</h5>
<p>Name of profile to return: ICC, IPTC, or generic profile.</p>

<h5>length</h5>
<p>the length of the profile.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetImageProfiles">MagickGetImageProfiles</a></h2>
<div class="doc-section">

<p>MagickGetImageProfiles() returns all the profile names that match the specified pattern associated with a wand.  Use MagickGetImageProfile() to return the value of a particular property.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetImageProfiles method is:</p>

<pre class="code">
  char *MagickGetImageProfiles(MagickWand *wand,
    size_t *number_profiles)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>pattern</h5>
<p>Specifies a pointer to a text string containing a pattern.</p>

<h5>number_profiles</h5>
<p>the number profiles associated with this wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetImageProperty">MagickGetImageProperty</a></h2>
<div class="doc-section">

<p>MagickGetImageProperty() returns a value associated with the specified property.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetImageProperty method is:</p>

<pre class="code">
  char *MagickGetImageProperty(MagickWand *wand,const char *property)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>property</h5>
<p>the property.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetImageProperties">MagickGetImageProperties</a></h2>
<div class="doc-section">

<p>MagickGetImageProperties() returns all the property names that match the specified pattern associated with a wand.  Use MagickGetImageProperty() to return the value of a particular property.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetImageProperties method is:</p>

<pre class="code">
  char *MagickGetImageProperties(MagickWand *wand,
    const char *pattern,size_t *number_properties)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>pattern</h5>
<p>Specifies a pointer to a text string containing a pattern.</p>

<h5>number_properties</h5>
<p>the number properties associated with this wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetInterlaceScheme">MagickGetInterlaceScheme</a></h2>
<div class="doc-section">

<p>MagickGetInterlaceScheme() gets the wand interlace scheme.</p>

<p>The format of the MagickGetInterlaceScheme method is:</p>

<pre class="code">
  InterlaceType MagickGetInterlaceScheme(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetInterpolateMethod">MagickGetInterpolateMethod</a></h2>
<div class="doc-section">

<p>MagickGetInterpolateMethod() gets the wand compression.</p>

<p>The format of the MagickGetInterpolateMethod method is:</p>

<pre class="code">
  InterpolatePixelMethod MagickGetInterpolateMethod(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetOption">MagickGetOption</a></h2>
<div class="doc-section">

<p>MagickGetOption() returns a value associated with a wand and the specified key.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetOption method is:</p>

<pre class="code">
  char *MagickGetOption(MagickWand *wand,const char *key)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>key</h5>
<p>the key.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetOptions">MagickGetOptions</a></h2>
<div class="doc-section">

<p>MagickGetOptions() returns all the option names that match the specified pattern associated with a wand.  Use MagickGetOption() to return the value of a particular option.  Use MagickRelinquishMemory() to free the value when you are finished with it.</p>

<p>The format of the MagickGetOptions method is:</p>

<pre class="code">
  char *MagickGetOptions(MagickWand *wand,size_t *number_options)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>pattern</h5>
<p>Specifies a pointer to a text string containing a pattern.</p>

<h5>number_options</h5>
<p>the number options associated with this wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetOrientation">MagickGetOrientation</a></h2>
<div class="doc-section">

<p>MagickGetOrientation() gets the wand orientation type.</p>

<p>The format of the MagickGetOrientation method is:</p>

<pre class="code">
  OrientationType MagickGetOrientation(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetPackageName">MagickGetPackageName</a></h2>
<div class="doc-section">

<p>MagickGetPackageName() returns the ImageMagick package name as a string constant.</p>

<p>The format of the MagickGetPackageName method is:</p>

<pre class="code">
  const char *MagickGetPackageName(void)
</pre>


 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetPage">MagickGetPage</a></h2>
<div class="doc-section">

<p>MagickGetPage() returns the page geometry associated with the magick wand.</p>

<p>The format of the MagickGetPage method is:</p>

<pre class="code">
  MagickBooleanType MagickGetPage(const MagickWand *wand,
    size_t *width,size_t *height,ssize_t *x,ssize_t *y)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>width</h5>
<p>the page width.</p>

<h5>height</h5>
<p>page height.</p>

<h5>x</h5>
<p>the page x-offset.</p>

<h5>y</h5>
<p>the page y-offset.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetPointsize">MagickGetPointsize</a></h2>
<div class="doc-section">

<p>MagickGetPointsize() returns the font pointsize associated with the MagickWand.</p>

<p>The format of the MagickGetPointsize method is:</p>

<pre class="code">
  double MagickGetPointsize(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetQuantumDepth">MagickGetQuantumDepth</a></h2>
<div class="doc-section">

<p>MagickGetQuantumDepth() returns the ImageMagick quantum depth as a string constant.</p>

<p>The format of the MagickGetQuantumDepth method is:</p>

<pre class="code">
  const char *MagickGetQuantumDepth(size_t *depth)
</pre>

<p>A description of each parameter follows:</p>

<h5>depth</h5>
<p>the quantum depth is returned as a number.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetQuantumRange">MagickGetQuantumRange</a></h2>
<div class="doc-section">

<p>MagickGetQuantumRange() returns the ImageMagick quantum range as a string constant.</p>

<p>The format of the MagickGetQuantumRange method is:</p>

<pre class="code">
  const char *MagickGetQuantumRange(size_t *range)
</pre>

<p>A description of each parameter follows:</p>

<h5>range</h5>
<p>the quantum range is returned as a number.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetReleaseDate">MagickGetReleaseDate</a></h2>
<div class="doc-section">

<p>MagickGetReleaseDate() returns the ImageMagick release date as a string constant.</p>

<p>The format of the MagickGetReleaseDate method is:</p>

<pre class="code">
  const char *MagickGetReleaseDate(void)
</pre>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetResolution">MagickGetResolution</a></h2>
<div class="doc-section">

<p>MagickGetResolution() gets the image X and Y resolution.</p>

<p>The format of the MagickGetResolution method is:</p>

<pre class="code">
  MagickBooleanType MagickGetResolution(const MagickWand *wand,double *x,
    double *y)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>x</h5>
<p>the x-resolution.</p>

<h5>y</h5>
<p>the y-resolution.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetResource">MagickGetResource</a></h2>
<div class="doc-section">

<p>MagickGetResource() returns the specified resource in megabytes.</p>

<p>The format of the MagickGetResource method is:</p>

<pre class="code">
  MagickSizeType MagickGetResource(const ResourceType type)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetResourceLimit">MagickGetResourceLimit</a></h2>
<div class="doc-section">

<p>MagickGetResourceLimit() returns the specified resource limit in megabytes.</p>

<p>The format of the MagickGetResourceLimit method is:</p>

<pre class="code">
  MagickSizeType MagickGetResourceLimit(const ResourceType type)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetSamplingFactors">MagickGetSamplingFactors</a></h2>
<div class="doc-section">

<p>MagickGetSamplingFactors() gets the horizontal and vertical sampling factor.</p>

<p>The format of the MagickGetSamplingFactors method is:</p>

<pre class="code">
  double *MagickGetSamplingFactor(MagickWand *wand,
    size_t *number_factors)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>number_factors</h5>
<p>the number of factors in the returned array.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetSize">MagickGetSize</a></h2>
<div class="doc-section">

<p>MagickGetSize() returns the size associated with the magick wand.</p>

<p>The format of the MagickGetSize method is:</p>

<pre class="code">
  MagickBooleanType MagickGetSize(const MagickWand *wand,
    size_t *columns,size_t *rows)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>columns</h5>
<p>the width in pixels.</p>

<h5>height</h5>
<p>the height in pixels.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetSizeOffset">MagickGetSizeOffset</a></h2>
<div class="doc-section">

<p>MagickGetSizeOffset() returns the size offset associated with the magick wand.</p>

<p>The format of the MagickGetSizeOffset method is:</p>

<pre class="code">
  MagickBooleanType MagickGetSizeOffset(const MagickWand *wand,
    ssize_t *offset)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>offset</h5>
<p>the image offset.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetType">MagickGetType</a></h2>
<div class="doc-section">

<p>MagickGetType() returns the wand type.</p>

<p>The format of the MagickGetType method is:</p>

<pre class="code">
  ImageType MagickGetType(MagickWand *wand)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickGetVersion">MagickGetVersion</a></h2>
<div class="doc-section">

<p>MagickGetVersion() returns the ImageMagick API version as a string constant and as a number.</p>

<p>The format of the MagickGetVersion method is:</p>

<pre class="code">
  const char *MagickGetVersion(size_t *version)
</pre>

<p>A description of each parameter follows:</p>

<h5>version</h5>
<p>the ImageMagick version is returned as a number.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickProfileImage">MagickProfileImage</a></h2>
<div class="doc-section">

<p>MagickProfileImage() adds or removes a ICC, IPTC, or generic profile from an image.  If the profile is NULL, it is removed from the image otherwise added.  Use a name of '*' and a profile of NULL to remove all profiles from the image.</p>

<p>The format of the MagickProfileImage method is:</p>

<pre class="code">
  MagickBooleanType MagickProfileImage(MagickWand *wand,const char *name,
    const void *profile,const size_t length)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>name</h5>
<p>Name of profile to add or remove: ICC, IPTC, or generic profile.</p>

<h5>profile</h5>
<p>the profile.</p>

<h5>length</h5>
<p>the length of the profile.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickRemoveImageProfile">MagickRemoveImageProfile</a></h2>
<div class="doc-section">

<p>MagickRemoveImageProfile() removes the named image profile and returns it.</p>

<p>The format of the MagickRemoveImageProfile method is:</p>

<pre class="code">
  unsigned char *MagickRemoveImageProfile(MagickWand *wand,
    const char *name,size_t *length)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>name</h5>
<p>Name of profile to return: ICC, IPTC, or generic profile.</p>

<h5>length</h5>
<p>the length of the profile.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetAntialias">MagickSetAntialias</a></h2>
<div class="doc-section">

<p>MagickSetAntialias() sets the antialias propery of the wand.</p>

<p>The format of the MagickSetAntialias method is:</p>

<pre class="code">
  MagickBooleanType MagickSetAntialias(MagickWand *wand,
    const MagickBooleanType antialias)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>antialias</h5>
<p>the antialias property.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetBackgroundColor">MagickSetBackgroundColor</a></h2>
<div class="doc-section">

<p>MagickSetBackgroundColor() sets the wand background color.</p>

<p>The format of the MagickSetBackgroundColor method is:</p>

<pre class="code">
  MagickBooleanType MagickSetBackgroundColor(MagickWand *wand,
    const PixelWand *background)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>background</h5>
<p>the background pixel wand.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetColorspace">MagickSetColorspace</a></h2>
<div class="doc-section">

<p>MagickSetColorspace() sets the wand colorspace type.</p>

<p>The format of the MagickSetColorspace method is:</p>

<pre class="code">
  MagickBooleanType MagickSetColorspace(MagickWand *wand,
    const ColorspaceType colorspace)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>colorspace</h5>
<p>the wand colorspace.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetCompression">MagickSetCompression</a></h2>
<div class="doc-section">

<p>MagickSetCompression() sets the wand compression type.</p>

<p>The format of the MagickSetCompression method is:</p>

<pre class="code">
  MagickBooleanType MagickSetCompression(MagickWand *wand,
    const CompressionType compression)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>compression</h5>
<p>the wand compression.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetCompressionQuality">MagickSetCompressionQuality</a></h2>
<div class="doc-section">

<p>MagickSetCompressionQuality() sets the wand compression quality.</p>

<p>The format of the MagickSetCompressionQuality method is:</p>

<pre class="code">
  MagickBooleanType MagickSetCompressionQuality(MagickWand *wand,
    const size_t quality)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>quality</h5>
<p>the wand compression quality.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetDepth">MagickSetDepth</a></h2>
<div class="doc-section">

<p>MagickSetDepth() sets the wand pixel depth.</p>

<p>The format of the MagickSetDepth method is:</p>

<pre class="code">
  MagickBooleanType MagickSetDepth(MagickWand *wand,
    const size_t depth)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>depth</h5>
<p>the wand pixel depth.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetExtract">MagickSetExtract</a></h2>
<div class="doc-section">

<p>MagickSetExtract() sets the extract geometry before you read or write an image file.  Use it for inline cropping (e.g. 200x200+0+0) or resizing (e.g.200x200).</p>

<p>The format of the MagickSetExtract method is:</p>

<pre class="code">
  MagickBooleanType MagickSetExtract(MagickWand *wand,
    const char *geometry)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>geometry</h5>
<p>the extract geometry.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetFilename">MagickSetFilename</a></h2>
<div class="doc-section">

<p>MagickSetFilename() sets the filename before you read or write an image file.</p>

<p>The format of the MagickSetFilename method is:</p>

<pre class="code">
  MagickBooleanType MagickSetFilename(MagickWand *wand,
    const char *filename)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>filename</h5>
<p>the image filename.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetFont">MagickSetFont</a></h2>
<div class="doc-section">

<p>MagickSetFont() sets the font associated with the MagickWand.</p>

<p>The format of the MagickSetFont method is:</p>

<pre class="code">
  MagickBooleanType MagickSetFont(MagickWand *wand, const char *font)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>font</h5>
<p>the font</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetFormat">MagickSetFormat</a></h2>
<div class="doc-section">

<p>MagickSetFormat() sets the format of the magick wand.</p>

<p>The format of the MagickSetFormat method is:</p>

<pre class="code">
  MagickBooleanType MagickSetFormat(MagickWand *wand,const char *format)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>format</h5>
<p>the image format.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetGravity">MagickSetGravity</a></h2>
<div class="doc-section">

<p>MagickSetGravity() sets the gravity type.</p>

<p>The format of the MagickSetGravity type is:</p>

<pre class="text">
  MagickBooleanType MagickSetGravity(MagickWand *wand,
    const GravityType type)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>type</h5>
<p>the gravity type.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetImageArtifact">MagickSetImageArtifact</a></h2>
<div class="doc-section">

<p>MagickSetImageArtifact() associates a artifact with an image.</p>

<p>The format of the MagickSetImageArtifact method is:</p>

<pre class="code">
  MagickBooleanType MagickSetImageArtifact(MagickWand *wand,
    const char *artifact,const char *value)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>artifact</h5>
<p>the artifact.</p>

<h5>value</h5>
<p>the value.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetImageProfile">MagickSetImageProfile</a></h2>
<div class="doc-section">

<p>MagickSetImageProfile() adds a named profile to the magick wand.  If a profile with the same name already exists, it is replaced.  This method differs from the MagickProfileImage() method in that it does not apply any CMS color profiles.</p>

<p>The format of the MagickSetImageProfile method is:</p>

<pre class="code">
  MagickBooleanType MagickSetImageProfile(MagickWand *wand,
    const char *name,const void *profile,const size_t length)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>name</h5>
<p>Name of profile to add or remove: ICC, IPTC, or generic profile.</p>

<h5>profile</h5>
<p>the profile.</p>

<h5>length</h5>
<p>the length of the profile.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetImageProperty">MagickSetImageProperty</a></h2>
<div class="doc-section">

<p>MagickSetImageProperty() associates a property with an image.</p>

<p>The format of the MagickSetImageProperty method is:</p>

<pre class="code">
  MagickBooleanType MagickSetImageProperty(MagickWand *wand,
    const char *property,const char *value)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>property</h5>
<p>the property.</p>

<h5>value</h5>
<p>the value.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetInterlaceScheme">MagickSetInterlaceScheme</a></h2>
<div class="doc-section">

<p>MagickSetInterlaceScheme() sets the image compression.</p>

<p>The format of the MagickSetInterlaceScheme method is:</p>

<pre class="code">
  MagickBooleanType MagickSetInterlaceScheme(MagickWand *wand,
    const InterlaceType interlace_scheme)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>interlace_scheme</h5>
<p>the image interlace scheme: NoInterlace, LineInterlace, PlaneInterlace, PartitionInterlace.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetInterpolateMethod">MagickSetInterpolateMethod</a></h2>
<div class="doc-section">

<p>MagickSetInterpolateMethod() sets the interpolate pixel method.</p>

<p>The format of the MagickSetInterpolateMethod method is:</p>

<pre class="code">
  MagickBooleanType MagickSetInterpolateMethod(MagickWand *wand,
    const InterpolateMethodPixel method)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>method</h5>
<p>the interpolate pixel method.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetOption">MagickSetOption</a></h2>
<div class="doc-section">

<p>MagickSetOption() associates one or options with the wand (.e.g MagickSetOption(wand,"jpeg:perserve","yes")).</p>

<p>The format of the MagickSetOption method is:</p>

<pre class="code">
  MagickBooleanType MagickSetOption(MagickWand *wand,const char *key,
    const char *value)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>key</h5>
<p>The key.</p>

<h5>value</h5>
<p>The value.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetOrientation">MagickSetOrientation</a></h2>
<div class="doc-section">

<p>MagickSetOrientation() sets the wand orientation type.</p>

<p>The format of the MagickSetOrientation method is:</p>

<pre class="code">
  MagickBooleanType MagickSetOrientation(MagickWand *wand,
    const OrientationType orientation)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>orientation</h5>
<p>the wand orientation.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetPage">MagickSetPage</a></h2>
<div class="doc-section">

<p>MagickSetPage() sets the page geometry of the magick wand.</p>

<p>The format of the MagickSetPage method is:</p>

<pre class="code">
  MagickBooleanType MagickSetPage(MagickWand *wand,
    const size_t width,const size_t height,const ssize_t x,
    const ssize_t y)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>width</h5>
<p>the page width.</p>

<h5>height</h5>
<p>the page height.</p>

<h5>x</h5>
<p>the page x-offset.</p>

<h5>y</h5>
<p>the page y-offset.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetPassphrase">MagickSetPassphrase</a></h2>
<div class="doc-section">

<p>MagickSetPassphrase() sets the passphrase.</p>

<p>The format of the MagickSetPassphrase method is:</p>

<pre class="code">
  MagickBooleanType MagickSetPassphrase(MagickWand *wand,
    const char *passphrase)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>passphrase</h5>
<p>the passphrase.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetPointsize">MagickSetPointsize</a></h2>
<div class="doc-section">

<p>MagickSetPointsize() sets the font pointsize associated with the MagickWand.</p>

<p>The format of the MagickSetPointsize method is:</p>

<pre class="code">
  MagickBooleanType MagickSetPointsize(MagickWand *wand,
    const double pointsize)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>pointsize</h5>
<p>the size of the font</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetProgressMonitor">MagickSetProgressMonitor</a></h2>
<div class="doc-section">

<p>MagickSetProgressMonitor() sets the wand progress monitor to the specified method and returns the previous progress monitor if any.  The progress monitor method looks like this:</p>

<pre class="text">
      MagickBooleanType MagickProgressMonitor(const char *text,
  const MagickOffsetType offset,const MagickSizeType span,
  void *client_data)
</pre>

<p>If the progress monitor returns MagickFalse, the current operation is interrupted.</p>

<p>The format of the MagickSetProgressMonitor method is:</p>

<pre class="code">
  MagickProgressMonitor MagickSetProgressMonitor(MagickWand *wand
    const MagickProgressMonitor progress_monitor,void *client_data)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>progress_monitor</h5>
<p>Specifies a pointer to a method to monitor progress of an image operation.</p>

<h5>client_data</h5>
<p>Specifies a pointer to any client data.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetResourceLimit">MagickSetResourceLimit</a></h2>
<div class="doc-section">

<p>MagickSetResourceLimit() sets the limit for a particular resource in megabytes.</p>

<p>The format of the MagickSetResourceLimit method is:</p>

<pre class="code">
  MagickBooleanType MagickSetResourceLimit(const ResourceType type,
    const MagickSizeType limit)
</pre>

<p>A description of each parameter follows:</p>

<h5>type</h5>
<p>the type of resource: AreaResource, MemoryResource, MapResource, DiskResource, FileResource.</p>

<p>o The maximum limit for the resource.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetResolution">MagickSetResolution</a></h2>
<div class="doc-section">

<p>MagickSetResolution() sets the image resolution.</p>

<p>The format of the MagickSetResolution method is:</p>

<pre class="code">
  MagickBooleanType MagickSetResolution(MagickWand *wand,
    const double x_resolution,const doubtl y_resolution)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>x_resolution</h5>
<p>the image x resolution.</p>

<h5>y_resolution</h5>
<p>the image y resolution.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetSamplingFactors">MagickSetSamplingFactors</a></h2>
<div class="doc-section">

<p>MagickSetSamplingFactors() sets the image sampling factors.</p>

<p>The format of the MagickSetSamplingFactors method is:</p>

<pre class="code">
  MagickBooleanType MagickSetSamplingFactors(MagickWand *wand,
    const size_t number_factors,const double *sampling_factors)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>number_factoes</h5>
<p>the number of factors.</p>

<h5>sampling_factors</h5>
<p>An array of doubles representing the sampling factor for each color component (in RGB order).</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetSize">MagickSetSize</a></h2>
<div class="doc-section">

<p>MagickSetSize() sets the size of the magick wand.  Set it before you read a raw image format such as RGB, GRAY, or CMYK.</p>

<p>The format of the MagickSetSize method is:</p>

<pre class="code">
  MagickBooleanType MagickSetSize(MagickWand *wand,
    const size_t columns,const size_t rows)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>columns</h5>
<p>the width in pixels.</p>

<h5>rows</h5>
<p>the rows in pixels.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetSizeOffset">MagickSetSizeOffset</a></h2>
<div class="doc-section">

<p>MagickSetSizeOffset() sets the size and offset of the magick wand.  Set it before you read a raw image format such as RGB, GRAY, or CMYK.</p>

<p>The format of the MagickSetSizeOffset method is:</p>

<pre class="code">
  MagickBooleanType MagickSetSizeOffset(MagickWand *wand,
    const size_t columns,const size_t rows,
    const ssize_t offset)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>columns</h5>
<p>the image width in pixels.</p>

<h5>rows</h5>
<p>the image rows in pixels.</p>

<h5>offset</h5>
<p>the image offset.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property_8c.html" id="MagickSetType">MagickSetType</a></h2>
<div class="doc-section">

<p>MagickSetType() sets the image type attribute.</p>

<p>The format of the MagickSetType method is:</p>

<pre class="code">
  MagickBooleanType MagickSetType(MagickWand *wand,
    const ImageType image_type)
</pre>

<p>A description of each parameter follows:</p>

<h5>wand</h5>
<p>the magick wand.</p>

<h5>image_type</h5>
<p>the image type:   UndefinedType, BilevelType, GrayscaleType, GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType, TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType, or OptimizeType.</p>

 </div>

</div>

<div id="linkbar">
    <span id="linkbar-west">&nbsp;</span>
    <span id="linkbar-center">
      <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;
      <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
    </span>
    <span id="linkbar-east">&nbsp;</span>
  </div>
  <div class="footer">
    <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>
    <span id="footer-east"> <a href="../http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
  </div>
  <div style="clear: both; margin: 0; width: 100%; "></div>
  <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-17690367-1']);
    _gaq.push(['_trackPageview']);

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
  </script>
</body>
</html>
