<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" value="application/xhtml+xml" />
  <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U=" />
  <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf" />
  <style type="text/css" media="screen,projection"><!--
    @import url("../../www/magick.css");
  --></style>
  <link rel="shortcut icon" href="../../images/wand.ico"  type="images/vnd.microsoft.icon"/>
  <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="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, Swiss, Army, Knife, Image, Processing"/>
  <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."/>
  <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-2010 ImageMagick Studio LLC"/>
  <meta name="Distribution" content="Global"/>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<a href="../../index.html">
  <img src="../../images/script.png" alt="[ImageMagick]"
  style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>
<a href="http://www.networkredux.com">
  <img src="../../images/networkredux.png" alt="[sponsor]"
  style="margin: 45px auto; border: 0px; float: left;" /></a>
<a href="http://www.imagemagick.org/discourse-server/">
  <img src="../../images/logo.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
<a href="../../index.html">
  <img src="../../images/sprite.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
</div>

<div class="eastbar">

<div class="menu">
  <a href="../../index.html">About ImageMagick</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../../www/command-line-tools.html">Command-line Tools</a>
</div>
<div class="sub">
    <a href="../../www/command-line-processing.html">Processing</a>
</div>
<div class="sub">
    <a href="../../www/command-line-options.html">Options</a>
</div>
<div class="sub">
    <a href="http://www.imagemagick.org/Usage/">Usage</a>
</div>
<div class="menu">
  <a href="../../www/api.html">Program Interfaces</a>
</div>
<div class="sub">
    <a href="../../www/magick-wand.html">MagickWand</a>
</div>
<div class="sub">
    <a href="../../www/magick-core.html">MagickCore</a>
</div>
<div class="sub">
    <a href="../../www/perl-magick.html">PerlMagick</a>
</div>
<div class="sub">
    <a href="../../Magick++/">Magick++</a>
</div>
<div class="menu">
  <a href="../../www/architecture.html">Architecture</a>
</div>
<div class="sep"></div>
<div  class="menu">
   <a href="../../www/install-source.html">Install from Source</a>
</div>
<div class="sub">
    <a href="../../www/install-source.html#unix">Unix</a>
</div>
<div class="sub">
    <a href="../../www/install-source.html#windows">Windows</a>
 </div>
<div class="menu">
  <a href="../../www/binary-releases.html">Binary Releases</a>
</div>
<div class="sub">
    <a href="../../www/binary-releases.html#unix">Unix</a>
</div>
<div class="sub">
    <a href="../../www/binary-releases.html#macosx">Mac OS X</a>
</div>
<div class="sub">
    <a href="../../www/binary-releases.html#windows">Windows</a>
</div>
<div class="menu">
  <a href="../../www/resources.html">Resources</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../../www/download.html">Download</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../http://www.imagemagick.org/script/search.php">Search</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../../www/sitemap.html">Site Map</a>
</div>
<div  class="sub">
    <a href="../../www/links.html">Links</a>
</div>
<div class="sep"></div>
<div  class="menu">
  <a href="../../www/sponsors.html">Sponsors:</a>

<div class="sponsbox">
<div  class="sponsor">
   <a href="http://www.abi-stoff.de/abizeitung/" title="Abibuch">Abizeitung</a><!-- 20101101000200 -->
</div>
<div  class="sponsor">
  <a href="http://www.tomsgutscheine.de">Tom's Gutscheine</a><!-- 201005010360 invendio.de-->
</div>
<div  class="sponsor">
  <a href="http://www.online-kredit-index.de">Kredit</a><!-- 201007010120 Buchhorn -->
</div>
<div  class="sponsor">
  <a href="http://www.blumenversender.com">Blumenversand</a><!-- 201005010120 -->
</div>
<div  class="sponsor">
  <a href="http://www.print24.de/">Druckerei</a><!-- 201009010720 -->
</div>
<div  class="sponsor">
   <a href="http://www.goyax.de">Börse</a><!-- 201004010240 Gewiese digital-finance.de -->
</div>
<div  class="sponsor">
   <a href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012011200 allesdruck.de-->
</div>
</div>
</div>


</div>

<div class="main">

<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="#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" target="source" name="MagickDeleteImageArtifact">MagickDeleteImageArtifact</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickDeleteImageProperty">MagickDeleteImageProperty</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickDeleteOption">MagickDeleteOption</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetAntialias">MagickGetAntialias</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetBackgroundColor">MagickGetBackgroundColor</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetColorspace">MagickGetColorspace</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetCompression">MagickGetCompression</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetCompressionQuality">MagickGetCompressionQuality</a></h2>
<div class="doc-section">

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetCopyright">MagickGetCopyright</a></h2>
<div class="doc-section">

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

<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" target="source" name="MagickGetFilename">MagickGetFilename</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetFont">MagickGetFont</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetFormat">MagickGetFormat</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetGravity">MagickGetGravity</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetHomeURL">MagickGetHomeURL</a></h2>
<div class="doc-section">

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

<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" target="source" name="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></ol>

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetImageProfile">MagickGetImageProfile</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetInterlaceScheme">MagickGetInterlaceScheme</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetInterpolateMethod">MagickGetInterpolateMethod</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetOrientation">MagickGetOrientation</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetPackageName">MagickGetPackageName</a></h2>
<div class="doc-section">

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

<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" target="source" name="MagickGetPage">MagickGetPage</a></h2>
<div class="doc-section">

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

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

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

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetPointsize">MagickGetPointsize</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetQuantumDepth">MagickGetQuantumDepth</a></h2>
<div class="doc-section">

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetQuantumRange">MagickGetQuantumRange</a></h2>
<div class="doc-section">

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetReleaseDate">MagickGetReleaseDate</a></h2>
<div class="doc-section">

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

<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" target="source" name="MagickGetResource">MagickGetResource</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetResourceLimit">MagickGetResourceLimit</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetSamplingFactors">MagickGetSamplingFactors</a></h2>
<div class="doc-section">

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetSize">MagickGetSize</a></h2>
<div class="doc-section">

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

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetSizeOffset">MagickGetSizeOffset</a></h2>
<div class="doc-section">

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetType">MagickGetType</a></h2>
<div class="doc-section">

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

<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></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickGetVersion">MagickGetVersion</a></h2>
<div class="doc-section">

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickRemoveImageProfile">MagickRemoveImageProfile</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetAntialias">MagickSetAntialias</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetBackgroundColor">MagickSetBackgroundColor</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetColorspace">MagickSetColorspace</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetCompression">MagickSetCompression</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetCompressionQuality">MagickSetCompressionQuality</a></h2>
<div class="doc-section">

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetDepth">MagickSetDepth</a></h2>
<div class="doc-section">

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetFilename">MagickSetFilename</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetFont">MagickSetFont</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetFormat">MagickSetFormat</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetGravity">MagickSetGravity</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetImageArtifact">MagickSetImageArtifact</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetImageProperty">MagickSetImageProperty</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetInterlaceScheme">MagickSetInterlaceScheme</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetInterpolateMethod">MagickSetInterpolateMethod</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetOrientation">MagickSetOrientation</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetPage">MagickSetPage</a></h2>
<div class="doc-section">

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

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

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

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetPassphrase">MagickSetPassphrase</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetPointsize">MagickSetPointsize</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetResourceLimit">MagickSetResourceLimit</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetResolution">MagickSetResolution</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetSamplingFactors">MagickSetSamplingFactors</a></h2>
<div class="doc-section">

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

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="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></ol>

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

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

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

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

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-property
_8c.html" target="source" name="MagickSetType">MagickSetType</a></h2>
<div class="doc-section">

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

<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></ol>

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

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

 </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://studio.webbyland.com/ImageMagick/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
    </span>
    <span id="linkbar-east">&nbsp;</span>
  </div>
  <div class="footer">
    <span id="footer-west">&copy; 1999-2010 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>
</body>
</html>
