<!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" dir="ltr">
<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: Image 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="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="Application-url" content="http://www.imagemagick.org"/>
  <meta name="Generator" content="PHP"/>
  <meta name="Keywords" content="magickwc, api, for, imagemagick:, image, methods, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
  <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"/>
  <link rel="icon" href="../../images/wand.png"  sizes="32x32"/>
  <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"/>
  <style type="text/css" media="all">
    @import url("../../www/magick.css");
  </style>
</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="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: 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="../../Magick++/">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="../http://www.imagemagick.org/script/search.php">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 title="Sponsors" href="../../www/sponsors.html">Sponsors:</a>

<div class="sponsbox">
<div  class="sponsor">
   <a title="Sponsor: Webdesign" href="http://www.renehornig.com/">Webdesign</a><!-- 20111001000240 -->
</div>
<div  class="sponsor">
  <a title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a title="Sponsor: Image Converter" href="http://www.batchphoto.com">Image Converter</a><!-- 201103010900 Bits Coffee-->
</div>
<div  class="sponsor">
  <a title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
</div>
<div  class="sponsor">
  <a title="Sponsor: Webdesign Agentur" href="http://www.ventzke-partner.de">Webdesign Agentur</a><!-- 201101010480 invendio.de-->
</div>
<div  class="sponsor">
  <a title="Sponsor: LVM Versicherung" href="http://www.neu-reich.de">LVM Versicherung</a><!-- 201101010480 -->
</div>
<div  class="sponsor">
  <a title="Sponsor: Diamonds are a Girls Best Friend" href="http://www.schmuck.org">Diamonds are a Girls Best Friend</a><!-- 201101010600 Peterssen-->
</div>
<div  class="sponsor">
   <a title="Sponsor: Druckerei Online" href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012011200 allesdruck.de-->
</div>
</div>
</div>
</div>

<div class="eastbar">
  <script type="text/javascript">
  <!--
    google_ad_client = "pub-3129977114552745";
    google_ad_slot = "0574824969";
    google_ad_width = 160;
    google_ad_height = 600;
  //-->
  </script>
  <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  </script>
</div>

<div class="main">

<p class="navigation-index">[<a href="#GetImageFromMagickWand">GetImageFromMagickWand</a> &bull; <a href="#MagickAdaptiveBlurImage">MagickAdaptiveBlurImage</a> &bull; <a href="#MagickAdaptiveResizeImage">MagickAdaptiveResizeImage</a> &bull; <a href="#MagickAdaptiveSharpenImage">MagickAdaptiveSharpenImage</a> &bull; <a href="#MagickAdaptiveThresholdImage">MagickAdaptiveThresholdImage</a> &bull; <a href="#MagickAddImage">MagickAddImage</a> &bull; <a href="#MagickAddNoiseImage">MagickAddNoiseImage</a> &bull; <a href="#MagickAffineTransformImage">MagickAffineTransformImage</a> &bull; <a href="#MagickAnnotateImage">MagickAnnotateImage</a> &bull; <a href="#MagickAnimateImages">MagickAnimateImages</a> &bull; <a href="#MagickAppendImages">MagickAppendImages</a> &bull; <a href="#MagickAutoGammaImage">MagickAutoGammaImage</a> &bull; <a href="#MagickAutoLevelImage">MagickAutoLevelImage</a> &bull; <a href="#MagickBlackThresholdImage">MagickBlackThresholdImage</a> &bull; <a href="#MagickBlueShiftImage">MagickBlueShiftImage</a> &bull; <a href="#MagickBlurImage">MagickBlurImage</a> &bull; <a href="#MagickBorderImage">MagickBorderImage</a> &bull; <a href="#Use MagickBrightnessContrastImage">Use MagickBrightnessContrastImage</a> &bull; <a href="#MagickCharcoalImage">MagickCharcoalImage</a> &bull; <a href="#MagickChopImage">MagickChopImage</a> &bull; <a href="#MagickClampImage">MagickClampImage</a> &bull; <a href="#MagickClipImage">MagickClipImage</a> &bull; <a href="#MagickClipImagePath">MagickClipImagePath</a> &bull; <a href="#MagickClutImage">MagickClutImage</a> &bull; <a href="#MagickCoalesceImages">MagickCoalesceImages</a> &bull; <a href="#MagickColorDecisionListImage">MagickColorDecisionListImage</a> &bull; <a href="#MagickColorizeImage">MagickColorizeImage</a> &bull; <a href="#MagickColorMatrixImage">MagickColorMatrixImage</a> &bull; <a href="#MagickCombineImages">MagickCombineImages</a> &bull; <a href="#MagickCommentImage">MagickCommentImage</a> &bull; <a href="#MagickCompareImageChannels">MagickCompareImageChannels</a> &bull; <a href="#MagickCompareImageLayers">MagickCompareImageLayers</a> &bull; <a href="#MagickCompareImages">MagickCompareImages</a> &bull; <a href="#MagickCompositeImage">MagickCompositeImage</a> &bull; <a href="#MagickContrastImage">MagickContrastImage</a> &bull; <a href="#MagickContrastStretchImage">MagickContrastStretchImage</a> &bull; <a href="#MagickConvolveImage">MagickConvolveImage</a> &bull; <a href="#MagickCropImage">MagickCropImage</a> &bull; <a href="#MagickCycleColormapImage">MagickCycleColormapImage</a> &bull; <a href="#MagickConstituteImage">MagickConstituteImage</a> &bull; <a href="#MagickDecipherImage">MagickDecipherImage</a> &bull; <a href="#MagickDeconstructImages">MagickDeconstructImages</a> &bull; <a href="#MagickDeskewImage">MagickDeskewImage</a> &bull; <a href="#MagickDespeckleImage">MagickDespeckleImage</a> &bull; <a href="#MagickDestroyImage">MagickDestroyImage</a> &bull; <a href="#MagickDisplayImage">MagickDisplayImage</a> &bull; <a href="#MagickDisplayImages">MagickDisplayImages</a> &bull; <a href="#MagickDistortImage">MagickDistortImage</a> &bull; <a href="#MagickDrawImage">MagickDrawImage</a> &bull; <a href="#MagickEdgeImage">MagickEdgeImage</a> &bull; <a href="#MagickEmbossImage">MagickEmbossImage</a> &bull; <a href="#MagickEncipherImage">MagickEncipherImage</a> &bull; <a href="#MagickEnhanceImage">MagickEnhanceImage</a> &bull; <a href="#MagickEqualizeImage">MagickEqualizeImage</a> &bull; <a href="#MagickEvaluateImage">MagickEvaluateImage</a> &bull; <a href="#MagickExportImagePixels">MagickExportImagePixels</a> &bull; <a href="#MagickExtentImage">MagickExtentImage</a> &bull; <a href="#MagickFilterImage">MagickFilterImage</a> &bull; <a href="#MagickFlipImage">MagickFlipImage</a> &bull; <a href="#MagickFloodfillPaintImage">MagickFloodfillPaintImage</a> &bull; <a href="#MagickFlopImage">MagickFlopImage</a> &bull; <a href="#MagickForwardFourierTransformImage">MagickForwardFourierTransformImage</a> &bull; <a href="#MagickFrameImage">MagickFrameImage</a> &bull; <a href="#MagickFunctionImage">MagickFunctionImage</a> &bull; <a href="#MagickFxImage">MagickFxImage</a> &bull; <a href="#MagickGammaImage">MagickGammaImage</a> &bull; <a href="#MagickGaussianBlurImage">MagickGaussianBlurImage</a> &bull; <a href="#MagickGetImage">MagickGetImage</a> &bull; <a href="#MagickGetImageAlphaChannel">MagickGetImageAlphaChannel</a> &bull; <a href="#MagickGetImageClipMask">MagickGetImageClipMask</a> &bull; <a href="#MagickGetImageBackgroundColor">MagickGetImageBackgroundColor</a> &bull; <a href="#MagickGetImageBlob">MagickGetImageBlob</a> &bull; <a href="#MagickGetImageBlob">MagickGetImageBlob</a> &bull; <a href="#MagickGetImageBluePrimary">MagickGetImageBluePrimary</a> &bull; <a href="#MagickGetImageBorderColor">MagickGetImageBorderColor</a> &bull; <a href="#MagickGetImageChannelDepth">MagickGetImageChannelDepth</a> &bull; <a href="#MagickGetImageChannelDistortion">MagickGetImageChannelDistortion</a> &bull; <a href="#MagickGetImageChannelDistortions">MagickGetImageChannelDistortions</a> &bull; <a href="#MagickGetImageChannelFeatures">MagickGetImageChannelFeatures</a> &bull; <a href="#MagickGetImageChannelKurtosis">MagickGetImageChannelKurtosis</a> &bull; <a href="#MagickGetImageChannelMean">MagickGetImageChannelMean</a> &bull; <a href="#MagickGetImageChannelRange">MagickGetImageChannelRange</a> &bull; <a href="#MagickGetImageChannelStatistics">MagickGetImageChannelStatistics</a> &bull; <a href="#MagickGetImageColormapColor">MagickGetImageColormapColor</a> &bull; <a href="#MagickGetImageColors">MagickGetImageColors</a> &bull; <a href="#MagickGetImageColorspace">MagickGetImageColorspace</a> &bull; <a href="#MagickGetImageCompose">MagickGetImageCompose</a> &bull; <a href="#MagickGetImageCompression">MagickGetImageCompression</a> &bull; <a href="#MagickGetImageCompression">MagickGetImageCompression</a> &bull; <a href="#MagickGetImageDelay">MagickGetImageDelay</a> &bull; <a href="#MagickGetImageDepth">MagickGetImageDepth</a> &bull; <a href="#MagickGetImageDistortion">MagickGetImageDistortion</a> &bull; <a href="#MagickGetImageDispose">MagickGetImageDispose</a> &bull; <a href="#MagickGetImageFilename">MagickGetImageFilename</a> &bull; <a href="#MagickGetImageFormat">MagickGetImageFormat</a> &bull; <a href="#MagickGetImageFuzz">MagickGetImageFuzz</a> &bull; <a href="#MagickGetImageGamma">MagickGetImageGamma</a> &bull; <a href="#MagickGetImageGravity">MagickGetImageGravity</a> &bull; <a href="#MagickGetImageGreenPrimary">MagickGetImageGreenPrimary</a> &bull; <a href="#MagickGetImageHeight">MagickGetImageHeight</a> &bull; <a href="#MagickGetImageHistogram">MagickGetImageHistogram</a> &bull; <a href="#MagickGetImageInterlaceScheme">MagickGetImageInterlaceScheme</a> &bull; <a href="#MagickGetImageInterpolateMethod">MagickGetImageInterpolateMethod</a> &bull; <a href="#MagickGetImageIterations">MagickGetImageIterations</a> &bull; <a href="#MagickGetImageLength">MagickGetImageLength</a> &bull; <a href="#MagickGetImageMatteColor">MagickGetImageMatteColor</a> &bull; <a href="#MagickGetImageOrientation">MagickGetImageOrientation</a> &bull; <a href="#MagickGetImagePage">MagickGetImagePage</a> &bull; <a href="#MagickGetImagePixelColor">MagickGetImagePixelColor</a> &bull; <a href="#MagickGetImageRedPrimary">MagickGetImageRedPrimary</a> &bull; <a href="#MagickGetImageRegion">MagickGetImageRegion</a> &bull; <a href="#MagickGetImageRenderingIntent">MagickGetImageRenderingIntent</a> &bull; <a href="#MagickGetImageResolution">MagickGetImageResolution</a> &bull; <a href="#MagickGetImageScene">MagickGetImageScene</a> &bull; <a href="#MagickGetImageSignature">MagickGetImageSignature</a> &bull; <a href="#MagickGetImageTicksPerSecond">MagickGetImageTicksPerSecond</a> &bull; <a href="#MagickGetImageType">MagickGetImageType</a> &bull; <a href="#MagickGetImageUnits">MagickGetImageUnits</a> &bull; <a href="#MagickGetImageVirtualPixelMethod">MagickGetImageVirtualPixelMethod</a> &bull; <a href="#MagickGetImageWhitePoint">MagickGetImageWhitePoint</a> &bull; <a href="#MagickGetImageWidth">MagickGetImageWidth</a> &bull; <a href="#MagickGetNumberImages">MagickGetNumberImages</a> &bull; <a href="#MagickGetImageTotalInkDensity">MagickGetImageTotalInkDensity</a> &bull; <a href="#MagickHaldClutImage">MagickHaldClutImage</a> &bull; <a href="#MagickHasNextImage">MagickHasNextImage</a> &bull; <a href="#MagickHasPreviousImage">MagickHasPreviousImage</a> &bull; <a href="#MagickIdentifyImage">MagickIdentifyImage</a> &bull; <a href="#MagickImplodeImage">MagickImplodeImage</a> &bull; <a href="#MagickImportImagePixels">MagickImportImagePixels</a> &bull; <a href="#MagickInverseFourierTransformImage">MagickInverseFourierTransformImage</a> &bull; <a href="#MagickLabelImage">MagickLabelImage</a> &bull; <a href="#MagickLevelImage">MagickLevelImage</a> &bull; <a href="#MagickLinearStretchImage">MagickLinearStretchImage</a> &bull; <a href="#MagickLiquidRescaleImage">MagickLiquidRescaleImage</a> &bull; <a href="#MagickMagnifyImage">MagickMagnifyImage</a> &bull; <a href="#MagickMedianFilterImage">MagickMedianFilterImage</a> &bull; <a href="#MagickMergeImageLayers">MagickMergeImageLayers</a> &bull; <a href="#MagickMinifyImage">MagickMinifyImage</a> &bull; <a href="#MagickModulateImage">MagickModulateImage</a> &bull; <a href="#MagickMontageImage">MagickMontageImage</a> &bull; <a href="#MagickMorphImages">MagickMorphImages</a> &bull; <a href="#MagickMorphologyImage">MagickMorphologyImage</a> &bull; <a href="#MagickMotionBlurImage">MagickMotionBlurImage</a> &bull; <a href="#MagickNegateImage">MagickNegateImage</a> &bull; <a href="#MagickNewImage">MagickNewImage</a> &bull; <a href="#MagickNextImage">MagickNextImage</a> &bull; <a href="#MagickNormalizeImage">MagickNormalizeImage</a> &bull; <a href="#MagickOilPaintImage">MagickOilPaintImage</a> &bull; <a href="#MagickOpaquePaintImage">MagickOpaquePaintImage</a> &bull; <a href="#MagickOptimizeImageLayers">MagickOptimizeImageLayers</a> &bull; <a href="#MagickOrderedPosterizeImage">MagickOrderedPosterizeImage</a> &bull; <a href="#MagickPingImage">MagickPingImage</a> &bull; <a href="#MagickPingImageBlob">MagickPingImageBlob</a> &bull; <a href="#MagickPingImageFile">MagickPingImageFile</a> &bull; <a href="#MagickPolaroidImage">MagickPolaroidImage</a> &bull; <a href="#MagickPosterizeImage">MagickPosterizeImage</a> &bull; <a href="#MagickPreviewImages">MagickPreviewImages</a> &bull; <a href="#MagickPreviousImage">MagickPreviousImage</a> &bull; <a href="#MagickQuantizeImage">MagickQuantizeImage</a> &bull; <a href="#MagickQuantizeImages">MagickQuantizeImages</a> &bull; <a href="#MagickRadialBlurImage">MagickRadialBlurImage</a> &bull; <a href="#MagickRaiseImage">MagickRaiseImage</a> &bull; <a href="#MagickRandomThresholdImage">MagickRandomThresholdImage</a> &bull; <a href="#MagickReadImage">MagickReadImage</a> &bull; <a href="#MagickReadImageBlob">MagickReadImageBlob</a> &bull; <a href="#MagickReadImageFile">MagickReadImageFile</a> &bull; <a href="#MagickReduceNoiseImage">MagickReduceNoiseImage</a> &bull; <a href="#MagickRemapImage">MagickRemapImage</a> &bull; <a href="#MagickRemoveImage">MagickRemoveImage</a> &bull; <a href="#MagickResampleImage">MagickResampleImage</a> &bull; <a href="#MagickResetImagePage">MagickResetImagePage</a> &bull; <a href="#MagickResizeImage">MagickResizeImage</a> &bull; <a href="#MagickRollImage">MagickRollImage</a> &bull; <a href="#MagickRotateImage">MagickRotateImage</a> &bull; <a href="#MagickSampleImage">MagickSampleImage</a> &bull; <a href="#MagickScaleImage">MagickScaleImage</a> &bull; <a href="#MagickSegmentImage">MagickSegmentImage</a> &bull; <a href="#MagickSelectiveBlurImage">MagickSelectiveBlurImage</a> &bull; <a href="#MagickSeparateImageChannel">MagickSeparateImageChannel</a> &bull; <a href="#MagickSepiaToneImage">MagickSepiaToneImage</a> &bull; <a href="#MagickSetImage">MagickSetImage</a> &bull; <a href="#MagickSetImageAlphaChannel">MagickSetImageAlphaChannel</a> &bull; <a href="#MagickSetImageBackgroundColor">MagickSetImageBackgroundColor</a> &bull; <a href="#MagickSetImageBias">MagickSetImageBias</a> &bull; <a href="#MagickSetImageBluePrimary">MagickSetImageBluePrimary</a> &bull; <a href="#MagickSetImageBorderColor">MagickSetImageBorderColor</a> &bull; <a href="#MagickSetImageChannelDepth">MagickSetImageChannelDepth</a> &bull; <a href="#MagickSetImageClipMask">MagickSetImageClipMask</a> &bull; <a href="#MagickSetImageColor">MagickSetImageColor</a> &bull; <a href="#MagickSetImageColormapColor">MagickSetImageColormapColor</a> &bull; <a href="#MagickSetImageColorspace">MagickSetImageColorspace</a> &bull; <a href="#MagickSetImageCompose">MagickSetImageCompose</a> &bull; <a href="#MagickSetImageCompression">MagickSetImageCompression</a> &bull; <a href="#MagickSetImageCompressionQuality">MagickSetImageCompressionQuality</a> &bull; <a href="#MagickSetImageDelay">MagickSetImageDelay</a> &bull; <a href="#MagickSetImageDepth">MagickSetImageDepth</a> &bull; <a href="#MagickSetImageDispose">MagickSetImageDispose</a> &bull; <a href="#MagickSetImageExtent">MagickSetImageExtent</a> &bull; <a href="#MagickSetImageFilename">MagickSetImageFilename</a> &bull; <a href="#MagickSetImageFormat">MagickSetImageFormat</a> &bull; <a href="#MagickSetImageFuzz">MagickSetImageFuzz</a> &bull; <a href="#MagickSetImageGamma">MagickSetImageGamma</a> &bull; <a href="#MagickSetImageGravity">MagickSetImageGravity</a> &bull; <a href="#MagickSetImageGreenPrimary">MagickSetImageGreenPrimary</a> &bull; <a href="#MagickSetImageInterlaceScheme">MagickSetImageInterlaceScheme</a> &bull; <a href="#MagickSetImageInterpolateMethod">MagickSetImageInterpolateMethod</a> &bull; <a href="#MagickSetImageIterations">MagickSetImageIterations</a> &bull; <a href="#MagickSetImageMatte">MagickSetImageMatte</a> &bull; <a href="#MagickSetImageMatteColor">MagickSetImageMatteColor</a> &bull; <a href="#MagickSetImageOpacity">MagickSetImageOpacity</a> &bull; <a href="#MagickSetImageOrientation">MagickSetImageOrientation</a> &bull; <a href="#MagickSetImagePage">MagickSetImagePage</a> &bull; <a href="#MagickSetImageProgressMonitor">MagickSetImageProgressMonitor</a> &bull; <a href="#MagickSetImageRedPrimary">MagickSetImageRedPrimary</a> &bull; <a href="#MagickSetImageRenderingIntent">MagickSetImageRenderingIntent</a> &bull; <a href="#MagickSetImageResolution">MagickSetImageResolution</a> &bull; <a href="#MagickSetImageScene">MagickSetImageScene</a> &bull; <a href="#MagickSetImageTicksPerSecond">MagickSetImageTicksPerSecond</a> &bull; <a href="#MagickSetImageType">MagickSetImageType</a> &bull; <a href="#MagickSetImageUnits">MagickSetImageUnits</a> &bull; <a href="#MagickSetImageVirtualPixelMethod">MagickSetImageVirtualPixelMethod</a> &bull; <a href="#MagickSetImageWhitePoint">MagickSetImageWhitePoint</a> &bull; <a href="#MagickShadeImage">MagickShadeImage</a> &bull; <a href="#MagickShadowImage">MagickShadowImage</a> &bull; <a href="#MagickSharpenImage">MagickSharpenImage</a> &bull; <a href="#MagickShaveImage">MagickShaveImage</a> &bull; <a href="#MagickShearImage">MagickShearImage</a> &bull; <a href="#MagickSigmoidalContrastImage">MagickSigmoidalContrastImage</a> &bull; <a href="#MagickSimilarityImage">MagickSimilarityImage</a> &bull; <a href="#MagickSketchImage">MagickSketchImage</a> &bull; <a href="#MagickSolarizeImage">MagickSolarizeImage</a> &bull; <a href="#MagickSparseColorImage">MagickSparseColorImage</a> &bull; <a href="#MagickSpliceImage">MagickSpliceImage</a> &bull; <a href="#MagickSpreadImage">MagickSpreadImage</a> &bull; <a href="#MagickSteganoImage">MagickSteganoImage</a> &bull; <a href="#MagickStereoImage">MagickStereoImage</a> &bull; <a href="#MagickStripImage">MagickStripImage</a> &bull; <a href="#MagickSwirlImage">MagickSwirlImage</a> &bull; <a href="#MagickTextureImage">MagickTextureImage</a> &bull; <a href="#MagickThresholdImage">MagickThresholdImage</a> &bull; <a href="#MagickThumbnailImage">MagickThumbnailImage</a> &bull; <a href="#MagickTintImage">MagickTintImage</a> &bull; <a href="#MagickTransformImage">MagickTransformImage</a> &bull; <a href="#MagickTransformImageColorspace">MagickTransformImageColorspace</a> &bull; <a href="#MagickTransparentPaintImage">MagickTransparentPaintImage</a> &bull; <a href="#MagickTransposeImage">MagickTransposeImage</a> &bull; <a href="#MagickTransverseImage">MagickTransverseImage</a> &bull; <a href="#MagickTrimImage">MagickTrimImage</a> &bull; <a href="#MagickUniqueImageColors">MagickUniqueImageColors</a> &bull; <a href="#MagickUnsharpMaskImage">MagickUnsharpMaskImage</a> &bull; <a href="#MagickVignetteImage">MagickVignetteImage</a> &bull; <a href="#MagickWaveImage">MagickWaveImage</a> &bull; <a href="#MagickWhiteThresholdImage">MagickWhiteThresholdImage</a> &bull; <a href="#MagickWriteImage">MagickWriteImage</a> &bull; <a href="#MagickWriteImageFile">MagickWriteImageFile</a> &bull; <a href="#MagickWriteImages">MagickWriteImages</a> &bull; <a href="#MagickWriteImagesFile">MagickWriteImagesFile</a>]</p>

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

<p>GetImageFromMagickWand() returns the current image from the magick wand.</p></ol>

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

<pre class="code">
  Image *GetImageFromMagickWand(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-image
_8c.html" target="source" name="MagickAdaptiveBlurImage">MagickAdaptiveBlurImage</a></h2>
<div class="doc-section">

<p>MagickAdaptiveBlurImage() adaptively blurs the image by blurring less intensely near image edges and more intensely far from edges. We blur the image with a Gaussian operator of the given radius and standard deviation (sigma).  For reasonable results, radius should be larger than sigma.  Use a radius of 0 and MagickAdaptiveBlurImage() selects a suitable radius for you.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAdaptiveBlurImage(MagickWand *wand,
    const double radius,const double sigma)
  MagickBooleanType MagickAdaptiveBlurImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

<p>MagickAdaptiveResizeImage() adaptively resize image with data dependent triangulation.</p></ol>

<p>MagickBooleanType MagickAdaptiveResizeImage(MagickWand *wand, const size_t columns,const size_t rows)</p></ol>

<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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>

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

<p>MagickAdaptiveSharpenImage() adaptively sharpens the image by sharpening more intensely near image edges and less intensely far from edges. We sharpen the image with a Gaussian operator of the given radius and standard deviation (sigma).  For reasonable results, radius should be larger than sigma.  Use a radius of 0 and MagickAdaptiveSharpenImage() selects a suitable radius for you.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAdaptiveSharpenImage(MagickWand *wand,
    const double radius,const double sigma)
  MagickBooleanType MagickAdaptiveSharpenImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

<p>MagickAdaptiveThresholdImage() selects an individual threshold for each pixel based on the range of intensity values in its local neighborhood.  This allows for thresholding of an image whose global intensity histogram doesn't contain distinctive peaks.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAdaptiveThresholdImage(MagickWand *wand,
    const size_t width,const size_t height,const ssize_t offset)
</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 width of the local neighborhood.</p></ol>

<h5>height</h5>
<ol><p>the height of the local neighborhood.</p></ol>

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

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

<p>MagickAddImage() adds the specified images at the current image location.</p></ol>

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

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

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

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

<h5>add_wand</h5>
<ol><p>A wand that contains images to add at the current image location.</p></ol>

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

<p>MagickAddNoiseImage() adds random noise to the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAddNoiseImage(MagickWand *wand,
    const NoiseType noise_type)
  MagickBooleanType MagickAddNoiseImageChannel(MagickWand *wand,
    const ChannelType channel,const NoiseType noise_type)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>noise_type</h5>
<ol><p>The type of noise: Uniform, Gaussian, Multiplicative, Impulse, Laplacian, or Poisson.</p></ol>

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

<p>MagickAffineTransformImage() transforms an image as dictated by the affine matrix of the drawing wand.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAffineTransformImage(MagickWand *wand,
    const DrawingWand *drawing_wand)
</pre>

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

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

<h5>drawing_wand</h5>
<ol><p>the draw wand.</p></ol>

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

<p>MagickAnnotateImage() annotates an image with text.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAnnotateImage(MagickWand *wand,
    const DrawingWand *drawing_wand,const double x,const double y,
    const double angle,const char *text)
</pre>

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

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

<h5>drawing_wand</h5>
<ol><p>the draw wand.</p></ol>

<h5>x</h5>
<ol><p>x ordinate to left of text</p></ol>

<h5>y</h5>
<ol><p>y ordinate to text baseline</p></ol>

<h5>angle</h5>
<ol><p>rotate text relative to this angle.</p></ol>

<h5>text</h5>
<ol><p>text to draw</p></ol>

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

<p>MagickAnimateImages() animates an image or image sequence.</p></ol>

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

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

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

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

<h5>server_name</h5>
<ol><p>the X server name.</p></ol>

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

<p>MagickAppendImages() append a set of images.</p></ol>

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

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

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

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

<h5>stack</h5>
<ol><p>By default, images are stacked left-to-right. Set stack to MagickTrue to stack them top-to-bottom.</p></ol>

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

<p>MagickAutoGammaImage() extracts the 'mean' from the image and adjust the image to try make set its gamma appropriatally.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAutoGammaImage(MagickWand *wand)
  MagickBooleanType MagickAutoGammaImageChannel(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

<p>MagickAutoLevelImage() adjusts the levels of a particular image channel by scaling the minimum and maximum values to the full quantum range.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickAutoLevelImage(MagickWand *wand)
  MagickBooleanType MagickAutoLevelImageChannel(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

<p>MagickBlackThresholdImage() is like MagickThresholdImage() but  forces all pixels below the threshold into black while leaving all pixels above the threshold unchanged.</p></ol>

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

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

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

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

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

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

<p>MagickBlueShiftImage() mutes the colors of the image to simulate a scene at nighttime in the moonlight.</p></ol>

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

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

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

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

<h5>factor</h5>
<ol><p>the blue shift factor (default 1.5)</p></ol>

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

<p>MagickBlurImage() blurs an image.  We convolve the image with a gaussian operator of the given radius and standard deviation (sigma). For reasonable results, the radius should be larger than sigma.  Use a radius of 0 and BlurImage() selects a suitable radius for you.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickBlurImage(MagickWand *wand,const double radius,
    const double sigma)
  MagickBooleanType MagickBlurImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the , in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the , in pixels.</p></ol>

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

<p>MagickBorderImage() surrounds the image with a border of the color defined by the bordercolor pixel wand.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickBorderImage(MagickWand *wand,
    const PixelWand *bordercolor,const size_t width,
    const size_t height)
</pre>

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

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

<h5>bordercolor</h5>
<ol><p>the border color pixel wand.</p></ol>

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

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

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

<p>Use MagickBrightnessContrastImage() to change the brightness and/or contrast of an image.  It converts the brightness and contrast parameters into slope and intercept and calls a polynomical function to apply to the image.</p></ol>


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

<pre class="code">
  MagickBooleanType MagickBrightnessContrastImage(MagickWand *wand,
    const double brightness,const double contrast)
  MagickBooleanType MagickBrightnessContrastImageChannel(MagickWand *wand,
    const ChannelType channel,const double brightness,
    const double contrast)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>brightness</h5>
<ol><p>the brightness percent (-100 .. 100).</p></ol>

<h5>contrast</h5>
<ol><p>the contrast percent (-100 .. 100).</p></ol>

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

<p>MagickCharcoalImage() simulates a charcoal drawing.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickCharcoalImage(MagickWand *wand,
    const double radius,const double sigma)
</pre>

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

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

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

<p>MagickChopImage() removes a region of an image and collapses the image to occupy the removed portion</p></ol>

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

<pre class="code">
  MagickBooleanType MagickChopImage(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></ol>

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

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

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

<h5>x</h5>
<ol><p>the region x offset.</p></ol>

<h5>y</h5>
<ol><p>the region y offset.</p></ol>


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

<p>MagickClampImage() restricts the color range from 0 to the quantum depth.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickClampImage(MagickWand *wand)
  MagickBooleanType MagickClampImageChannel(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

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

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

<p>MagickClipImage() clips along the first path from the 8BIM profile, if present.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickClipImage(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-image
_8c.html" target="source" name="MagickClipImagePath">MagickClipImagePath</a></h2>
<div class="doc-section">

<p>MagickClipImagePath() clips along the named paths from the 8BIM profile, if present. Later operations take effect inside the path.  Id may be a number if preceded with #, to work on a numbered path, e.g., "#1" to use the first path.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickClipImagePath(MagickWand *wand,
    const char *pathname,const MagickBooleanType inside)
</pre>

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

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

<h5>pathname</h5>
<ol><p>name of clipping path resource. If name is preceded by #, use clipping path numbered by name.</p></ol>

<h5>inside</h5>
<ol><p>if non-zero, later operations take effect inside clipping path. Otherwise later operations take effect outside clipping path.</p></ol>

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

<p>MagickClutImage() replaces colors in the image from a color lookup table.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickClutImage(MagickWand *wand,
    const MagickWand *clut_wand)
  MagickBooleanType MagickClutImageChannel(MagickWand *wand,
    const ChannelType channel,const MagickWand *clut_wand)
</pre>

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

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

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

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

<p>MagickCoalesceImages() composites a set of images while respecting any page offsets and disposal methods.  GIF, MIFF, and MNG animation sequences typically start with an image background and each subsequent image varies in size and offset.  MagickCoalesceImages() returns a new sequence where each image in the sequence is the same size as the first and composited with the next image in the sequence.</p></ol>

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

<pre class="code">
  MagickWand *MagickCoalesceImages(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-image
_8c.html" target="source" name="MagickColorDecisionListImage">MagickColorDecisionListImage</a></h2>
<div class="doc-section">

<p>MagickColorDecisionListImage() accepts a lightweight Color Correction Collection (CCC) file which solely contains one or more color corrections and applies the color correction to the image.  Here is a sample CCC file:</p>

<pre class="text">
      <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2">
      <ColorCorrection id="cc03345">
            <SOPNode>
                 <Slope> 0.9 1.2 0.5 </Slope>
                 <Offset> 0.4 -0.5 0.6 </Offset>
                 <Power> 1.0 0.8 1.5 </Power>
            </SOPNode>
            <SATNode>
                 <Saturation> 0.85 </Saturation>
            </SATNode>
      </ColorCorrection>
      </ColorCorrectionCollection>
</pre>

<p>which includes the offset, slope, and power for each of the RGB channels as well as the saturation.</p></ol>

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

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

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

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

<h5>color_correction_collection</h5>
<ol><p>the color correction collection in XML.</p></ol>

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

<p>MagickColorizeImage() blends the fill color with each pixel in the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickColorizeImage(MagickWand *wand,
    const PixelWand *colorize,const PixelWand *opacity)
</pre>

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

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

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

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

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

<p>MagickColorMatrixImage() apply color transformation to an image. The method permits saturation changes, hue rotation, luminance to alpha, and various other effects.  Although variable-sized transformation matrices can be used, typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA (or RGBA with offsets).  The matrix is similar to those used by Adobe Flash except offsets are in column 6 rather than 5 (in support of CMYKA images) and offsets are normalized (divide Flash offset by 255).</p></ol>

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

<pre class="code">
  MagickBooleanType MagickColorMatrixImage(MagickWand *wand,
    const KernelInfo *color_matrix)
</pre>

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

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

<h5>color_matrix</h5>
<ol><p>the color matrix.</p></ol>

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

<p>MagickCombineImages() combines one or more images into a single image.  The grayscale value of the pixels of each image in the sequence is assigned in order to the specified  hannels of the combined image.   The typical ordering would be image 1 => Red, 2 => Green, 3 => Blue, etc.</p></ol>

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

<pre class="code">
  MagickWand *MagickCombineImages(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

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

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

<p>MagickCommentImage() adds a comment to your image.</p></ol>

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

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

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

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

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

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

<p>MagickCompareImageChannels() compares one or more image channels of an image to a reconstructed image and returns the difference image.</p></ol>

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

<pre class="code">
  MagickWand *MagickCompareImageChannels(MagickWand *wand,
    const MagickWand *reference,const ChannelType channel,
    const MetricType metric,double *distortion)
</pre>

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

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

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

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

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

<h5>distortion</h5>
<ol><p>the computed distortion between the images.</p></ol>

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

<p>MagickCompareImageLayers() compares each image with the next in a sequence and returns the maximum bounding region of any pixel differences it discovers.</p></ol>

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

<pre class="code">
  MagickWand *MagickCompareImageLayers(MagickWand *wand,
    const ImageLayerMethod 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 compare method.</p></ol>

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

<p>MagickCompareImages() compares an image to a reconstructed image and returns the specified difference image.</p></ol>

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

<pre class="code">
  MagickWand *MagickCompareImages(MagickWand *wand,
    const MagickWand *reference,const MetricType metric,
    double *distortion)
</pre>

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

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

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

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

<h5>distortion</h5>
<ol><p>the computed distortion between the images.</p></ol>

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

<p>MagickCompositeImage() composite one image onto another at the specified offset.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickCompositeImage(MagickWand *wand,
    const MagickWand *composite_wand,const CompositeOperator compose,
    const ssize_t x,const ssize_t y)
  MagickBooleanType MagickCompositeImageChannel(MagickWand *wand,
    const ChannelType channel,const MagickWand *composite_wand,
    const CompositeOperator compose,const ssize_t x,const ssize_t y)
</pre>

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

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

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

<h5>compose</h5>
<ol><p>This operator affects how the composite is applied to the image.  The default is Over.  Choose from these operators:</p>

<pre class="text">
    OverCompositeOp       InCompositeOp         OutCompositeOp
    AtopCompositeOp       XorCompositeOp        PlusCompositeOp
    MinusCompositeOp      AddCompositeOp        SubtractCompositeOp
    DifferenceCompositeOp BumpmapCompositeOp    CopyCompositeOp
    DisplaceCompositeOp
</pre>

<h5>x</h5>
<ol><p>the column offset of the composited image.</p></ol>

<h5>y</h5>
<ol><p>the row offset of the composited image.</p></ol>

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

<p>MagickContrastImage() enhances the intensity differences between the lighter and darker elements of the image.  Set sharpen to a value other than 0 to increase the image contrast otherwise the contrast is reduced.</p></ol>

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

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

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

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

<h5>sharpen</h5>
<ol><p>Increase or decrease image contrast.</p></ol>


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

<p>MagickContrastStretchImage() enhances the contrast of a color image by adjusting the pixels color to span the entire range of colors available. You can also reduce the influence of a particular channel with a gamma value of 0.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickContrastStretchImage(MagickWand *wand,
    const double black_point,const double white_point)
  MagickBooleanType MagickContrastStretchImageChannel(MagickWand *wand,
    const ChannelType channel,const double black_point,
    const double white_point)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>black_point</h5>
<ol><p>the black point.</p></ol>

<h5>white_point</h5>
<ol><p>the white point.</p></ol>

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

<p>MagickConvolveImage() applies a custom convolution kernel to the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickConvolveImage(MagickWand *wand,
    const size_t order,const double *kernel)
  MagickBooleanType MagickConvolveImageChannel(MagickWand *wand,
    const ChannelType channel,const size_t order,
    const double *kernel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>order</h5>
<ol><p>the number of columns and rows in the filter kernel.</p></ol>

<h5>kernel</h5>
<ol><p>An array of doubles representing the convolution kernel.</p></ol>

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

<p>MagickCropImage() extracts a region of the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickCropImage(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></ol>

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

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

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

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

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

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

<p>MagickCycleColormapImage() displaces an image's colormap by a given number of positions.  If you cycle the colormap a number of times you can produce a psychodelic effect.</p></ol>

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

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

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

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

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

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

<p>MagickConstituteImage() adds an image to the wand comprised of the pixel data you supply.  The pixel data must be in scanline order top-to-bottom. The data can be char, short int, int, float, or double.  Float and double require the pixels to be normalized [0..1], otherwise [0..Max],  where Max is the maximum value the type can accomodate (e.g. 255 for char).  For example, to create a 640x480 image from unsigned red-green-blue character data, use</p></ol>

<p>MagickConstituteImage(wand,640,640,"RGB",CharPixel,pixels);</p></ol>

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

<pre class="code">
  MagickBooleanType MagickConstituteImage(MagickWand *wand,
    const size_t columns,const size_t rows,const char *map,
    const StorageType storage,void *pixels)
</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>width in pixels of the image.</p></ol>

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

<h5>map</h5>
<ol><p>This string reflects the expected ordering of the pixel array. It can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.</p></ol>

<h5>storage</h5>
<ol><p>Define the data type of the pixels.  Float and double types are expected to be normalized [0..1] otherwise [0..QuantumRange].  Choose from these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, LongPixel, QuantumPixel, or ShortPixel.</p></ol>

<h5>pixels</h5>
<ol><p>This array of values contain the pixel components as defined by map and type.  You must preallocate this array where the expected length varies depending on the values of width, height, map, and type.</p></ol>


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

<p>MagickDecipherImage() converts cipher pixels to plain pixels.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickDecipherImage(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-image
_8c.html" target="source" name="MagickDeconstructImages">MagickDeconstructImages</a></h2>
<div class="doc-section">

<p>MagickDeconstructImages() compares each image with the next in a sequence and returns the maximum bounding region of any pixel differences it discovers.</p></ol>

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

<pre class="code">
  MagickWand *MagickDeconstructImages(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-image
_8c.html" target="source" name="MagickDeskewImage">MagickDeskewImage</a></h2>
<div class="doc-section">

<p>MagickDeskewImage() removes skew from the image.  Skew is an artifact that occurs in scanned images because of the camera being misaligned, imperfections in the scanning or surface, or simply because the paper was not placed completely flat when scanned.</p></ol>

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

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

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

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

<h5>threshold</h5>
<ol><p>separate background from foreground.</p></ol>

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

<p>MagickDespeckleImage() reduces the speckle noise in an image while perserving the edges of the original image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickDespeckleImage(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-image
_8c.html" target="source" name="MagickDestroyImage">MagickDestroyImage</a></h2>
<div class="doc-section">

<p>MagickDestroyImage() dereferences an image, deallocating memory associated with the image if the reference count becomes zero.</p></ol>

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

<pre class="code">
  Image *MagickDestroyImage(Image *image)
</pre>

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

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

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

<p>MagickDisplayImage() displays an image.</p></ol>

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

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

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

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

<h5>server_name</h5>
<ol><p>the X server name.</p></ol>

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

<p>MagickDisplayImages() displays an image or image sequence.</p></ol>

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

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

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

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

<h5>server_name</h5>
<ol><p>the X server name.</p></ol>

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

<p>MagickDistortImage() distorts an image using various distortion methods, by mapping color lookups of the source image to a new destination image usally of the same size as the source image, unless 'bestfit' is set to true.</p></ol>

<p>If 'bestfit' is enabled, and distortion allows it, the destination image is adjusted to ensure the whole source 'image' will just fit within the final destination image, which will be sized and offset accordingly.  Also in many cases the virtual offset of the source image will be taken into account in the mapping.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickDistortImage(MagickWand *wand,
    const DistortImageMethod method,const size_t number_arguments,
    const double *arguments,const MagickBooleanType bestfit)
</pre>

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

<h5>image</h5>
<ol><p>the image to be distorted.</p></ol>

<h5>method</h5>
<ol><p>the method of image distortion.</p></ol>

<p>ArcDistortion always ignores the source image offset, and always 'bestfit' the destination image with the top left corner offset relative to the polar mapping center.</p></ol>

<p>Bilinear has no simple inverse mapping so it does not allow 'bestfit' style of image distortion.</p></ol>

<p>Affine, Perspective, and Bilinear, do least squares fitting of the distortion when more than the minimum number of control point pairs are provided.</p></ol>

<p>Perspective, and Bilinear, falls back to a Affine distortion when less that 4 control point pairs are provided. While Affine distortions let you use any number of control point pairs, that is Zero pairs is a no-Op (viewport only) distrotion, one pair is a translation and two pairs of control points do a scale-rotate-translate, without any shearing.</p></ol>

<h5>number_arguments</h5>
<ol><p>the number of arguments given for this distortion method.</p></ol>

<h5>arguments</h5>
<ol><p>the arguments for this distortion method.</p></ol>

<h5>bestfit</h5>
<ol><p>Attempt to resize destination to fit distorted source.</p></ol>

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

<p>MagickDrawImage() renders the drawing wand on the current image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickDrawImage(MagickWand *wand,
    const DrawingWand *drawing_wand)
</pre>

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

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

<h5>drawing_wand</h5>
<ol><p>the draw wand.</p></ol>

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

<p>MagickEdgeImage() enhance edges within the image with a convolution filter of the given radius.  Use a radius of 0 and Edge() selects a suitable radius for you.</p></ol>

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

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

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

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

<h5>radius</h5>
<ol><p>the radius of the pixel neighborhood.</p></ol>

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

<p>MagickEmbossImage() returns a grayscale image with a three-dimensional effect.  We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma).  For reasonable results, radius should be larger than sigma.  Use a radius of 0 and Emboss() selects a suitable radius for you.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickEmbossImage(MagickWand *wand,const double radius,
    const double sigma)
</pre>

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

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

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

<p>MagickEncipherImage() converts plaint pixels to cipher pixels.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickEncipherImage(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-image
_8c.html" target="source" name="MagickEnhanceImage">MagickEnhanceImage</a></h2>
<div class="doc-section">

<p>MagickEnhanceImage() applies a digital filter that improves the quality of a noisy image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickEnhanceImage(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-image
_8c.html" target="source" name="MagickEqualizeImage">MagickEqualizeImage</a></h2>
<div class="doc-section">

<p>MagickEqualizeImage() equalizes the image histogram.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickEqualizeImage(MagickWand *wand)
  MagickBooleanType MagickEqualizeImageChannel(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

<p>MagickEvaluateImage() applys an arithmetic, relational, or logical expression to an image.  Use these operators to lighten or darken an image, to increase or decrease contrast in an image, or to produce the "negative" of an image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickEvaluateImage(MagickWand *wand,
    const MagickEvaluateOperator operator,const double value)
  MagickBooleanType MagickEvaluateImages(MagickWand *wand,
    const MagickEvaluateOperator operator)
  MagickBooleanType MagickEvaluateImageChannel(MagickWand *wand,
    const ChannelType channel,const MagickEvaluateOperator op,
    const double value)
</pre>

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

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

<h5>channel</h5>
<ol><p>the channel(s).</p></ol>

<h5>op</h5>
<ol><p>A channel operator.</p></ol>

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

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

<p>MagickExportImagePixels() extracts pixel data from an image and returns it to you.  The method returns MagickTrue on success otherwise MagickFalse if an error is encountered.  The data is returned as char, short int, int, ssize_t, float, or double in the order specified by map.</p></ol>

<p>Suppose you want to extract the first scanline of a 640x480 image as character data in red-green-blue order:</p>

<pre class="text">
  MagickExportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
</pre>

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

<pre class="code">
  MagickBooleanType MagickExportImagePixels(MagickWand *wand,
    const ssize_t x,const ssize_t y,const size_t columns,
    const size_t rows,const char *map,const StorageType storage,
    void *pixels)
</pre>

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

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

<h5>x, y, columns, rows</h5>
<ol><p>These values define the perimeter of a region of pixels you want to extract.</p></ol>

<h5>map</h5>
<ol><p>This string reflects the expected ordering of the pixel array. It can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.</p></ol>

<h5>storage</h5>
<ol><p>Define the data type of the pixels.  Float and double types are expected to be normalized [0..1] otherwise [0..QuantumRange].  Choose from these types: CharPixel, DoublePixel, FloatPixel, IntegerPixel, LongPixel, QuantumPixel, or ShortPixel.</p></ol>

<h5>pixels</h5>
<ol><p>This array of values contain the pixel components as defined by map and type.  You must preallocate this array where the expected length varies depending on the values of width, height, map, and type.</p></ol>

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

<p>MagickExtentImage() extends the image as defined by the geometry, gravity, and wand background color.  Set the (x,y) offset of the geometry to move the original wand relative to the extended wand.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickExtentImage(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></ol>

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

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

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

<h5>x</h5>
<ol><p>the region x offset.</p></ol>

<h5>y</h5>
<ol><p>the region y offset.</p></ol>

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

<p>MagickFilterImage() applies a custom convolution kernel to the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickFilterImage(MagickWand *wand,
    const KernelInfo *kernel)
  MagickBooleanType MagickFilterImageChannel(MagickWand *wand,
    const ChannelType channel,const KernelInfo *kernel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>kernel</h5>
<ol><p>An array of doubles representing the convolution kernel.</p></ol>

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

<p>MagickFlipImage() creates a vertical mirror image by reflecting the pixels around the central x-axis.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickFlipImage(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-image
_8c.html" target="source" name="MagickFloodfillPaintImage">MagickFloodfillPaintImage</a></h2>
<div class="doc-section">

<p>MagickFloodfillPaintImage() changes the color value of any pixel that matches target and is an immediate neighbor.  If the method FillToBorderMethod is specified, the color value is changed for any neighbor pixel that does not match the bordercolor member of image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickFloodfillPaintImage(MagickWand *wand,
    const ChannelType channel,const PixelWand *fill,const double fuzz,
    const PixelWand *bordercolor,const ssize_t x,const ssize_t y,
    const MagickBooleanType invert)
</pre>

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

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

<h5>channel</h5>
<ol><p>the channel(s).</p></ol>

<h5>fill</h5>
<ol><p>the floodfill color pixel wand.</p></ol>

<h5>fuzz</h5>
<ol><p>By default target must match a particular pixel color exactly.  However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same.  For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p></ol>

<h5>bordercolor</h5>
<ol><p>the border color pixel wand.</p></ol>

<h5>x,y</h5>
<ol><p>the starting location of the operation.</p></ol>

<h5>invert</h5>
<ol><p>paint any pixel that does not match the target color.</p></ol>

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

<p>MagickFlopImage() creates a horizontal mirror image by reflecting the pixels around the central y-axis.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickFlopImage(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-image
_8c.html" target="source" name="MagickForwardFourierTransformImage">MagickForwardFourierTransformImage</a></h2>
<div class="doc-section">

<p>MagickForwardFourierTransformImage() implements the discrete Fourier transform (DFT) of the image either as a magnitude / phase or real / imaginary image pair.</p></ol>

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

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

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

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

<h5>magnitude</h5>
<ol><p>if true, return as magnitude / phase pair otherwise a real / imaginary image pair.</p></ol>

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

<p>MagickFrameImage() adds a simulated three-dimensional border around the image.  The width and height specify the border width of the vertical and horizontal sides of the frame.  The inner and outer bevels indicate the width of the inner and outer shadows of the frame.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickFrameImage(MagickWand *wand,
    const PixelWand *matte_color,const size_t width,
    const size_t height,const ssize_t inner_bevel,
    const ssize_t outer_bevel)
</pre>

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

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

<h5>matte_color</h5>
<ol><p>the frame color pixel wand.</p></ol>

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

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

<h5>inner_bevel</h5>
<ol><p>the inner bevel width.</p></ol>

<h5>outer_bevel</h5>
<ol><p>the outer bevel width.</p></ol>

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

<p>MagickFunctionImage() applys an arithmetic, relational, or logical expression to an image.  Use these operators to lighten or darken an image, to increase or decrease contrast in an image, or to produce the "negative" of an image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickFunctionImage(MagickWand *wand,
    const MagickFunction function,const size_t number_arguments,
    const double *arguments)
  MagickBooleanType MagickFunctionImageChannel(MagickWand *wand,
    const ChannelType channel,const MagickFunction function,
    const size_t number_arguments,const double *arguments)
</pre>

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

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

<h5>channel</h5>
<ol><p>the channel(s).</p></ol>

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

<h5>number_arguments</h5>
<ol><p>the number of function arguments.</p></ol>

<h5>arguments</h5>
<ol><p>the function arguments.</p></ol>

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

<p>MagickFxImage() evaluate expression for each pixel in the image.</p></ol>

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

<pre class="code">
  MagickWand *MagickFxImage(MagickWand *wand,const char *expression)
  MagickWand *MagickFxImageChannel(MagickWand *wand,
    const ChannelType channel,const char *expression)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

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

<p>MagickGammaImage() gamma-corrects an image.  The same image viewed on different devices will have perceptual differences in the way the image's intensities are represented on the screen.  Specify individual gamma levels for the red, green, and blue channels, or adjust all three with the gamma parameter.  Values typically range from 0.8 to 2.3.</p></ol>

<p>You can also reduce the influence of a particular channel with a gamma value of 0.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGammaImage(MagickWand *wand,const double gamma)
  MagickBooleanType MagickGammaImageChannel(MagickWand *wand,
    const ChannelType channel,const double gamma)
</pre>

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

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

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

<h5>level</h5>
<ol><p>Define the level of gamma correction.</p></ol>

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

<p>MagickGaussianBlurImage() blurs an image.  We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, the radius should be larger than sigma.  Use a radius of 0 and MagickGaussianBlurImage() selects a suitable radius for you.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGaussianBlurImage(MagickWand *wand,
    const double radius,const double sigma)
  MagickBooleanType MagickGaussianBlurImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

<p>MagickGetImage() gets the image at the current image index.</p></ol>

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

<pre class="code">
  MagickWand *MagickGetImage(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-image
_8c.html" target="source" name="MagickGetImageAlphaChannel">MagickGetImageAlphaChannel</a></h2>
<div class="doc-section">

<p>MagickGetImageAlphaChannel() returns MagickFalse if the image alpha channel is not activated.  That is, the image is RGB rather than RGBA or CMYK rather than CMYKA.</p></ol>

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

<pre class="code">
  size_t MagickGetImageAlphaChannel(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-image
_8c.html" target="source" name="MagickGetImageClipMask">MagickGetImageClipMask</a></h2>
<div class="doc-section">

<p>MagickGetImageClipMask() gets the image clip mask at the current image index.</p></ol>

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

<pre class="code">
  MagickWand *MagickGetImageClipMask(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-image
_8c.html" target="source" name="MagickGetImageBackgroundColor">MagickGetImageBackgroundColor</a></h2>
<div class="doc-section">

<p>MagickGetImageBackgroundColor() returns the image background color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageBackgroundColor(MagickWand *wand,
    PixelWand *background_color)
</pre>

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

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

<h5>background_color</h5>
<ol><p>Return the background color.</p></ol>

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

<p>MagickGetImageBlob() implements direct to memory image formats.  It returns the image as a blob and its length.   Use MagickSetFormat() to set the format of the returned blob (GIF, JPEG,  PNG, etc.).</p></ol>

<p>Use MagickRelinquishMemory() to free the blob when you are done with it.</p></ol>

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

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

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

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

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

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

<p>MagickGetImageBlob() implements direct to memory image formats.  It returns the image sequence as a blob and its length.  The format of the image determines the format of the returned blob (GIF, JPEG,  PNG, etc.).  To return a different image format, use MagickSetImageFormat().</p></ol>

<p>Note, some image formats do not permit multiple images to the same image stream (e.g. JPEG).  in this instance, just the first image of the sequence is returned as a blob.</p></ol>

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

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

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

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

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

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

<p>MagickGetImageBluePrimary() returns the chromaticy blue primary point for the image.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the chromaticity blue primary x-point.</p></ol>

<h5>y</h5>
<ol><p>the chromaticity blue primary y-point.</p></ol>

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

<p>MagickGetImageBorderColor() returns the image border color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageBorderColor(MagickWand *wand,
    PixelWand *border_color)
</pre>

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

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

<h5>border_color</h5>
<ol><p>Return the border color.</p></ol>

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

<p>MagickGetImageChannelDepth() gets the depth for one or more image channels.</p></ol>

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

<pre class="code">
  size_t MagickGetImageChannelDepth(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

<p>MagickGetImageChannelDistortion() compares one or more image channels of an image to a reconstructed image and returns the specified distortion metric.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageChannelDistortion(MagickWand *wand,
    const MagickWand *reference,const ChannelType channel,
    const MetricType metric,double *distortion)
</pre>

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

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

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

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

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

<h5>distortion</h5>
<ol><p>the computed distortion between the images.</p></ol>

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

<p>MagickGetImageChannelDistortions() compares one or more image channels of an image to a reconstructed image and returns the specified distortion metrics.</p></ol>

<p>Use MagickRelinquishMemory() to free the metrics when you are done with them.</p></ol>

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

<pre class="code">
  double *MagickGetImageChannelDistortion(MagickWand *wand,
    const MagickWand *reference,const MetricType metric)
</pre>

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

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

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

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

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

<p>MagickGetImageChannelFeatures() returns features for each channel in the image in each of four directions (horizontal, vertical, left and right diagonals) for the specified distance.  The features include the angular second moment, contrast, correlation, sum of squares: variance, inverse difference moment, sum average, sum varience, sum entropy, entropy, difference variance, difference entropy, information measures of correlation 1, information measures of correlation 2, and maximum correlation coefficient.  You can access the red channel contrast, for example, like this:</p>

<pre class="text">
  channel_features=MagickGetImageChannelFeatures(wand,1);
  contrast=channel_features[RedChannel].contrast[0];
</pre>

<p>Use MagickRelinquishMemory() to free the statistics buffer.</p></ol>

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

<pre class="code">
  ChannelFeatures *MagickGetImageChannelFeatures(MagickWand *wand,
    const size_t distance)
</pre>

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

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

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

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

<p>MagickGetImageChannelKurtosis() gets the kurtosis and skewness of one or more image channels.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageChannelKurtosis(MagickWand *wand,
    const ChannelType channel,double *kurtosis,double *skewness)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>kurtosis</h5>
<ol><p>The kurtosis for the specified channel(s).</p></ol>

<h5>skewness</h5>
<ol><p>The skewness for the specified channel(s).</p></ol>

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

<p>MagickGetImageChannelMean() gets the mean and standard deviation of one or more image channels.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageChannelMean(MagickWand *wand,
    const ChannelType channel,double *mean,double *standard_deviation)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>mean</h5>
<ol><p>The mean pixel value for the specified channel(s).</p></ol>

<h5>standard_deviation</h5>
<ol><p>The standard deviation for the specified channel(s).</p></ol>

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

<p>MagickGetImageChannelRange() gets the range for one or more image channels.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageChannelRange(MagickWand *wand,
    const ChannelType channel,double *minima,double *maxima)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>minima</h5>
<ol><p>The minimum pixel value for the specified channel(s).</p></ol>

<h5>maxima</h5>
<ol><p>The maximum pixel value for the specified channel(s).</p></ol>

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

<p>MagickGetImageChannelStatistics() returns statistics for each channel in the image.  The statistics include the channel depth, its minima and maxima, the mean, the standard deviation, the kurtosis and the skewness. You can access the red channel mean, for example, like this:</p>

<pre class="text">
  channel_statistics=MagickGetImageChannelStatistics(wand);
  red_mean=channel_statistics[RedChannel].mean;
</pre>

<p>Use MagickRelinquishMemory() to free the statistics buffer.</p></ol>

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

<pre class="code">
  ChannelStatistics *MagickGetImageChannelStatistics(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-image
_8c.html" target="source" name="MagickGetImageColormapColor">MagickGetImageColormapColor</a></h2>
<div class="doc-section">

<p>MagickGetImageColormapColor() returns the color of the specified colormap index.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageColormapColor(MagickWand *wand,
    const size_t index,PixelWand *color)
</pre>

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

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

<h5>index</h5>
<ol><p>the offset into the image colormap.</p></ol>

<h5>color</h5>
<ol><p>Return the colormap color in this wand.</p></ol>

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

<p>MagickGetImageColors() gets the number of unique colors in the image.</p></ol>

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

<pre class="code">
  size_t MagickGetImageColors(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-image
_8c.html" target="source" name="MagickGetImageColorspace">MagickGetImageColorspace</a></h2>
<div class="doc-section">

<p>MagickGetImageColorspace() gets the image colorspace.</p></ol>

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

<pre class="code">
  ColorspaceType MagickGetImageColorspace(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-image
_8c.html" target="source" name="MagickGetImageCompose">MagickGetImageCompose</a></h2>
<div class="doc-section">

<p>MagickGetImageCompose() returns the composite operator associated with the image.</p></ol>

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

<pre class="code">
  CompositeOperator MagickGetImageCompose(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-image
_8c.html" target="source" name="MagickGetImageCompression">MagickGetImageCompression</a></h2>
<div class="doc-section">

<p>MagickGetImageCompression() gets the image compression.</p></ol>

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

<pre class="code">
  CompressionType MagickGetImageCompression(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-image
_8c.html" target="source" name="MagickGetImageCompression">MagickGetImageCompression</a></h2>
<div class="doc-section">

<p>MagickGetImageCompression() gets the image compression quality.</p></ol>

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

<pre class="code">
  size_t MagickGetImageCompression(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-image
_8c.html" target="source" name="MagickGetImageDelay">MagickGetImageDelay</a></h2>
<div class="doc-section">

<p>MagickGetImageDelay() gets the image delay.</p></ol>

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

<pre class="code">
  size_t MagickGetImageDelay(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-image
_8c.html" target="source" name="MagickGetImageDepth">MagickGetImageDepth</a></h2>
<div class="doc-section">

<p>MagickGetImageDepth() gets the image depth.</p></ol>

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

<pre class="code">
  size_t MagickGetImageDepth(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-image
_8c.html" target="source" name="MagickGetImageDistortion">MagickGetImageDistortion</a></h2>
<div class="doc-section">

<p>MagickGetImageDistortion() compares an image to a reconstructed image and returns the specified distortion metric.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageDistortion(MagickWand *wand,
    const MagickWand *reference,const MetricType metric,
    double *distortion)
</pre>

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

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

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

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

<h5>distortion</h5>
<ol><p>the computed distortion between the images.</p></ol>

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

<p>MagickGetImageDispose() gets the image disposal method.</p></ol>

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

<pre class="code">
  DisposeType MagickGetImageDispose(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-image
_8c.html" target="source" name="MagickGetImageFilename">MagickGetImageFilename</a></h2>
<div class="doc-section">

<p>MagickGetImageFilename() returns the filename of a particular image in a sequence.</p></ol>

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

<pre class="code">
  char *MagickGetImageFilename(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-image
_8c.html" target="source" name="MagickGetImageFormat">MagickGetImageFormat</a></h2>
<div class="doc-section">

<p>MagickGetImageFormat() returns the format of a particular image in a sequence.</p></ol>

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

<pre class="code">
  const char *MagickGetImageFormat(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-image
_8c.html" target="source" name="MagickGetImageFuzz">MagickGetImageFuzz</a></h2>
<div class="doc-section">

<p>MagickGetImageFuzz() gets the image fuzz.</p></ol>

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

<pre class="code">
  double MagickGetImageFuzz(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-image
_8c.html" target="source" name="MagickGetImageGamma">MagickGetImageGamma</a></h2>
<div class="doc-section">

<p>MagickGetImageGamma() gets the image gamma.</p></ol>

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

<pre class="code">
  double MagickGetImageGamma(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-image
_8c.html" target="source" name="MagickGetImageGravity">MagickGetImageGravity</a></h2>
<div class="doc-section">

<p>MagickGetImageGravity() gets the image gravity.</p></ol>

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

<pre class="code">
  GravityType MagickGetImageGravity(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-image
_8c.html" target="source" name="MagickGetImageGreenPrimary">MagickGetImageGreenPrimary</a></h2>
<div class="doc-section">

<p>MagickGetImageGreenPrimary() returns the chromaticy green primary point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the chromaticity green primary x-point.</p></ol>

<h5>y</h5>
<ol><p>the chromaticity green primary y-point.</p></ol>

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

<p>MagickGetImageHeight() returns the image height.</p></ol>

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

<pre class="code">
  size_t MagickGetImageHeight(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-image
_8c.html" target="source" name="MagickGetImageHistogram">MagickGetImageHistogram</a></h2>
<div class="doc-section">

<p>MagickGetImageHistogram() returns the image histogram as an array of PixelWand wands.</p></ol>

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

<pre class="code">
  PixelWand **MagickGetImageHistogram(MagickWand *wand,
    size_t *number_colors)
</pre>

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

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

<h5>number_colors</h5>
<ol><p>the number of unique colors in the image and the number of pixel wands returned.</p></ol>

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

<p>MagickGetImageInterlaceScheme() gets the image interlace scheme.</p></ol>

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

<pre class="code">
  InterlaceType MagickGetImageInterlaceScheme(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-image
_8c.html" target="source" name="MagickGetImageInterpolateMethod">MagickGetImageInterpolateMethod</a></h2>
<div class="doc-section">

<p>MagickGetImageInterpolateMethod() returns the interpolation method for the sepcified image.</p></ol>

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

<pre class="code">
  InterpolatePixelMethod MagickGetImageInterpolateMethod(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-image
_8c.html" target="source" name="MagickGetImageIterations">MagickGetImageIterations</a></h2>
<div class="doc-section">

<p>MagickGetImageIterations() gets the image iterations.</p></ol>

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

<pre class="code">
  size_t MagickGetImageIterations(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-image
_8c.html" target="source" name="MagickGetImageLength">MagickGetImageLength</a></h2>
<div class="doc-section">

<p>MagickGetImageLength() returns the image length in bytes.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImageLength(MagickWand *wand,
    MagickSizeType *length)
</pre>

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

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

<h5>length</h5>
<ol><p>the image length in bytes.</p></ol>

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

<p>MagickGetImageMatteColor() returns the image matte color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImagematteColor(MagickWand *wand,
    PixelWand *matte_color)
</pre>

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

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

<h5>matte_color</h5>
<ol><p>Return the matte color.</p></ol>

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

<p>MagickGetImageOrientation() returns the image orientation.</p></ol>

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

<pre class="code">
  OrientationType MagickGetImageOrientation(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-image
_8c.html" target="source" name="MagickGetImagePage">MagickGetImagePage</a></h2>
<div class="doc-section">

<p>MagickGetImagePage() returns the page geometry associated with the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImagePage(MagickWand *wand,
    size_t *width,size_t *height,ssize_t *x,ssize_t *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-image
_8c.html" target="source" name="MagickGetImagePixelColor">MagickGetImagePixelColor</a></h2>
<div class="doc-section">

<p>MagickGetImagePixelColor() returns the color of the specified pixel.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickGetImagePixelColor(MagickWand *wand,
    const ssize_t x,const ssize_t y,PixelWand *color)
</pre>

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

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

<h5>x,y</h5>
<ol><p>the pixel offset into the image.</p></ol>

<h5>color</h5>
<ol><p>Return the colormap color in this wand.</p></ol>

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

<p>MagickGetImageRedPrimary() returns the chromaticy red primary point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the chromaticity red primary x-point.</p></ol>

<h5>y</h5>
<ol><p>the chromaticity red primary y-point.</p></ol>

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

<p>MagickGetImageRegion() extracts a region of the image and returns it as a a new wand.</p></ol>

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

<pre class="code">
  MagickWand *MagickGetImageRegion(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></ol>

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

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

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

<h5>x</h5>
<ol><p>the region x offset.</p></ol>

<h5>y</h5>
<ol><p>the region y offset.</p></ol>

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

<p>MagickGetImageRenderingIntent() gets the image rendering intent.</p></ol>

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

<pre class="code">
  RenderingIntent MagickGetImageRenderingIntent(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-image
_8c.html" target="source" name="MagickGetImageResolution">MagickGetImageResolution</a></h2>
<div class="doc-section">

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

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

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

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

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

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

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

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

<p>MagickGetImageScene() gets the image scene.</p></ol>

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

<pre class="code">
  size_t MagickGetImageScene(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-image
_8c.html" target="source" name="MagickGetImageSignature">MagickGetImageSignature</a></h2>
<div class="doc-section">

<p>MagickGetImageSignature() generates an SHA-256 message digest for the image pixel stream.</p></ol>

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

<pre class="code">
  const char MagickGetImageSignature(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-image
_8c.html" target="source" name="MagickGetImageTicksPerSecond">MagickGetImageTicksPerSecond</a></h2>
<div class="doc-section">

<p>MagickGetImageTicksPerSecond() gets the image ticks-per-second.</p></ol>

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

<pre class="code">
  size_t MagickGetImageTicksPerSecond(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-image
_8c.html" target="source" name="MagickGetImageType">MagickGetImageType</a></h2>
<div class="doc-section">

<p>MagickGetImageType() gets the potential image type:</p></ol>

<p>Bilevel        Grayscale       GrayscaleMatte Palette        PaletteMatte    TrueColor TrueColorMatte ColorSeparation ColorSeparationMatte</p></ol>

<p>To ensure the image type matches its potential, use MagickSetImageType():</p>

<pre class="text">
      (void) MagickSetImageType(wand,MagickGetImageType(wand));
</pre>

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

<pre class="code">
  ImageType MagickGetImageType(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-image
_8c.html" target="source" name="MagickGetImageUnits">MagickGetImageUnits</a></h2>
<div class="doc-section">

<p>MagickGetImageUnits() gets the image units of resolution.</p></ol>

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

<pre class="code">
  ResolutionType MagickGetImageUnits(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-image
_8c.html" target="source" name="MagickGetImageVirtualPixelMethod">MagickGetImageVirtualPixelMethod</a></h2>
<div class="doc-section">

<p>MagickGetImageVirtualPixelMethod() returns the virtual pixel method for the sepcified image.</p></ol>

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

<pre class="code">
  VirtualPixelMethod MagickGetImageVirtualPixelMethod(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-image
_8c.html" target="source" name="MagickGetImageWhitePoint">MagickGetImageWhitePoint</a></h2>
<div class="doc-section">

<p>MagickGetImageWhitePoint() returns the chromaticy white point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the chromaticity white x-point.</p></ol>

<h5>y</h5>
<ol><p>the chromaticity white y-point.</p></ol>

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

<p>MagickGetImageWidth() returns the image width.</p></ol>

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

<pre class="code">
  size_t MagickGetImageWidth(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-image
_8c.html" target="source" name="MagickGetNumberImages">MagickGetNumberImages</a></h2>
<div class="doc-section">

<p>MagickGetNumberImages() returns the number of images associated with a magick wand.</p></ol>

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

<pre class="code">
  size_t MagickGetNumberImages(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-image
_8c.html" target="source" name="MagickGetImageTotalInkDensity">MagickGetImageTotalInkDensity</a></h2>
<div class="doc-section">

<p>MagickGetImageTotalInkDensity() gets the image total ink density.</p></ol>

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

<pre class="code">
  double MagickGetImageTotalInkDensity(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-image
_8c.html" target="source" name="MagickHaldClutImage">MagickHaldClutImage</a></h2>
<div class="doc-section">

<p>MagickHaldClutImage() replaces colors in the image from a Hald color lookup table.   A Hald color lookup table is a 3-dimensional color cube mapped to 2 dimensions.  Create it with the HALD coder.  You can apply any color transformation to the Hald image and then use this method to apply the transform to the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickHaldClutImage(MagickWand *wand,
    const MagickWand *hald_wand)
  MagickBooleanType MagickHaldClutImageChannel(MagickWand *wand,
    const ChannelType channel,const MagickWand *hald_wand)
</pre>

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

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

<h5>hald_image</h5>
<ol><p>the hald CLUT image.</p></ol>

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

<p>MagickHasNextImage() returns MagickTrue if the wand has more images when traversing the list in the forward direction</p></ol>

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

<pre class="code">
  MagickBooleanType MagickHasNextImage(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-image
_8c.html" target="source" name="MagickHasPreviousImage">MagickHasPreviousImage</a></h2>
<div class="doc-section">

<p>MagickHasPreviousImage() returns MagickTrue if the wand has more images when traversing the list in the reverse direction</p></ol>

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

<pre class="code">
  MagickBooleanType MagickHasPreviousImage(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-image
_8c.html" target="source" name="MagickIdentifyImage">MagickIdentifyImage</a></h2>
<div class="doc-section">

<p>MagickIdentifyImage() identifies an image by printing its attributes to the file.  Attributes include the image width, height, size, and others.</p></ol>

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

<pre class="code">
  const char *MagickIdentifyImage(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-image
_8c.html" target="source" name="MagickImplodeImage">MagickImplodeImage</a></h2>
<div class="doc-section">

<p>MagickImplodeImage() creates a new image that is a copy of an existing one with the image pixels "implode" by the specified percentage.  It allocates the memory necessary for the new Image structure and returns a pointer to the new image.</p></ol>

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

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

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

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

<h5>amount</h5>
<ol><p>Define the extent of the implosion.</p></ol>

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

<p>MagickImportImagePixels() accepts pixel datand stores it in the image at the location you specify.  The method returns MagickFalse on success otherwise MagickTrue if an error is encountered.  The pixel data can be either char, short int, int, ssize_t, float, or double in the order specified by map.</p></ol>

<p>Suppose your want to upload the first scanline of a 640x480 image from character data in red-green-blue order:</p>

<pre class="text">
  MagickImportImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
</pre>

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

<pre class="code">
  MagickBooleanType MagickImportImagePixels(MagickWand *wand,
    const ssize_t x,const ssize_t y,const size_t columns,
    const size_t rows,const char *map,const StorageType storage,
    const void *pixels)
</pre>

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

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

<h5>x, y, columns, rows</h5>
<ol><p>These values define the perimeter of a region of pixels you want to define.</p></ol>

<h5>map</h5>
<ol><p>This string reflects the expected ordering of the pixel array. It can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent), O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.</p></ol>

<h5>storage</h5>
<ol><p>Define the data type of the pixels.  Float and double types are expected to be normalized [0..1] otherwise [0..QuantumRange].  Choose from these types: CharPixel, ShortPixel, IntegerPixel, LongPixel, FloatPixel, or DoublePixel.</p></ol>

<h5>pixels</h5>
<ol><p>This array of values contain the pixel components as defined by map and type.  You must preallocate this array where the expected length varies depending on the values of width, height, map, and type.</p></ol>

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

<p>MagickInverseFourierTransformImage() implements the inverse discrete Fourier transform (DFT) of the image either as a magnitude / phase or real / imaginary image pair.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickInverseFourierTransformImage(
    MagickWand *magnitude_wand,MagickWand *phase_wand,
    const MagickBooleanType magnitude)
</pre>

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

<h5>magnitude_wand</h5>
<ol><p>the magnitude or real wand.</p></ol>

<h5>phase_wand</h5>
<ol><p>the phase or imaginary wand.</p></ol>

<h5>magnitude</h5>
<ol><p>if true, return as magnitude / phase pair otherwise a real / imaginary image pair.</p></ol>

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

<p>MagickLabelImage() adds a label to your image.</p></ol>

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

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

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

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

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

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

<p>MagickLevelImage() adjusts the levels of an image by scaling the colors falling between specified white and black points to the full available quantum range. The parameters provided represent the black, mid, and white points. The black point specifies the darkest color in the image. Colors darker than the black point are set to zero. Mid point specifies a gamma correction to apply to the image.  White point specifies the lightest color in the image. Colors brighter than the white point are set to the maximum quantum value.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickLevelImage(MagickWand *wand,
    const double black_point,const double gamma,const double white_point)
  MagickBooleanType MagickLevelImageChannel(MagickWand *wand,
    const ChannelType channel,const double black_point,const double gamma,
    const double white_point)
</pre>

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

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

<h5>channel</h5>
<ol><p>Identify which channel to level: RedChannel, GreenChannel,</p></ol>

<h5>black_point</h5>
<ol><p>the black point.</p></ol>

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

<h5>white_point</h5>
<ol><p>the white point.</p></ol>

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

<p>MagickLinearStretchImage() stretches with saturation the image intensity.</p></ol>

<p>You can also reduce the influence of a particular channel with a gamma value of 0.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickLinearStretchImage(MagickWand *wand,
    const double black_point,const double white_point)
</pre>

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

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

<h5>black_point</h5>
<ol><p>the black point.</p></ol>

<h5>white_point</h5>
<ol><p>the white point.</p></ol>

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

<p>MagickLiquidRescaleImage() rescales image with seam carving.</p></ol>

<p>MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand, const size_t columns,const size_t rows, const double delta_x,const double rigidity)</p></ol>

<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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>

<h5>delta_x</h5>
<ol><p>maximum seam transversal step (0 means straight seams).</p></ol>

<h5>rigidity</h5>
<ol><p>introduce a bias for non-straight seams (typically 0).</p></ol>

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

<p>MagickMagnifyImage() is a convenience method that scales an image proportionally to twice its original size.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickMagnifyImage(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-image
_8c.html" target="source" name="MagickMedianFilterImage">MagickMedianFilterImage</a></h2>
<div class="doc-section">

<p>MagickMedianFilterImage() applies a digital filter that improves the quality of a noisy image.  Each pixel is replaced by the median in a set of neighboring pixels as defined by radius.</p></ol>

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

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

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

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

<h5>radius</h5>
<ol><p>the radius of the pixel neighborhood.</p></ol>

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

<p>MagickMergeImageLayers() composes all the image layers from the current given image onward to produce a single image of the merged layers.</p></ol>

<p>The inital canvas's size depends on the given ImageLayerMethod, and is initialized using the first images background color.  The images are then compositied onto that image in sequence using the given composition that has been assigned to each individual image.</p></ol>

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

<pre class="code">
  MagickWand *MagickMergeImageLayers(MagickWand *wand,
    const ImageLayerMethod 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 method of selecting the size of the initial canvas.</p></ol>

<p>MergeLayer: Merge all layers onto a canvas just large enough to hold all the actual images. The virtual canvas of the first image is preserved but otherwise ignored.</p></ol>

<p>FlattenLayer: Use the virtual canvas size of first image. Images which fall outside this canvas is clipped. This can be used to 'fill out' a given virtual canvas.</p></ol>

<p>MosaicLayer: Start with the virtual canvas of the first image, enlarging left and right edges to contain all images. Images with negative offsets will be clipped.</p></ol>

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

<p>MagickMinifyImage() is a convenience method that scales an image proportionally to one-half its original size</p></ol>

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

<pre class="code">
  MagickBooleanType MagickMinifyImage(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-image
_8c.html" target="source" name="MagickModulateImage">MagickModulateImage</a></h2>
<div class="doc-section">

<p>MagickModulateImage() lets you control the brightness, saturation, and hue of an image.  Hue is the percentage of absolute rotation from the current position.  For example 50 results in a counter-clockwise rotation of 90 degrees, 150 results in a clockwise rotation of 90 degrees, with 0 and 200 both resulting in a rotation of 180 degrees.</p></ol>

<p>To increase the color brightness by 20 and decrease the color saturation by 10 and leave the hue unchanged, use: 120,90,100.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickModulateImage(MagickWand *wand,
    const double brightness,const double saturation,const double hue)
</pre>

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

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

<h5>brightness</h5>
<ol><p>the percent change in brighness.</p></ol>

<h5>saturation</h5>
<ol><p>the percent change in saturation.</p></ol>

<h5>hue</h5>
<ol><p>the percent change in hue.</p></ol>

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

<p>MagickMontageImage() creates a composite image by combining several separate images. The images are tiled on the composite image with the name of the image optionally appearing just below the individual tile.</p></ol>

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

<pre class="code">
  MagickWand *MagickMontageImage(MagickWand *wand,
    const DrawingWand drawing_wand,const char *tile_geometry,
    const char *thumbnail_geometry,const MontageMode mode,
    const char *frame)
</pre>

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

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

<h5>drawing_wand</h5>
<ol><p>the drawing wand.  The font name, size, and color are obtained from this wand.</p></ol>

<h5>tile_geometry</h5>
<ol><p>the number of tiles per row and page (e.g. 6x4+0+0).</p></ol>

<h5>thumbnail_geometry</h5>
<ol><p>Preferred image size and border size of each thumbnail (e.g. 120x120+4+3>).</p></ol>

<h5>mode</h5>
<ol><p>Thumbnail framing mode: Frame, Unframe, or Concatenate.</p></ol>

<h5>frame</h5>
<ol><p>Surround the image with an ornamental border (e.g. 15x15+3+3). The frame color is that of the thumbnail's matte color.</p></ol>

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

<p>MagickMorphImages() method morphs a set of images.  Both the image pixels and size are linearly interpolated to give the appearance of a meta-morphosis from one image to the next.</p></ol>

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

<pre class="code">
  MagickWand *MagickMorphImages(MagickWand *wand,
    const size_t number_frames)
</pre>

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

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

<h5>number_frames</h5>
<ol><p>the number of in-between images to generate.</p></ol>

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

<p>MagickMorphologyImage() applies a user supplied kernel to the image according to the given mophology method.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickMorphologyImage(MagickWand *wand,
    MorphologyMethod method,const ssize_t iterations,KernelInfo *kernel)
  MagickBooleanType MagickMorphologyImageChannel(MagickWand *wand,
    ChannelType channel,MorphologyMethod method,const ssize_t iterations,
    KernelInfo *kernel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>method</h5>
<ol><p>the morphology method to be applied.</p></ol>

<h5>iterations</h5>
<ol><p>apply the operation this many times (or no change). A value of -1 means loop until no change found.  How this is applied may depend on the morphology method.  Typically this is a value of 1.</p></ol>

<h5>kernel</h5>
<ol><p>An array of doubles representing the morphology kernel.</p></ol>

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

<p>MagickMotionBlurImage() simulates motion blur.  We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, radius should be larger than sigma.  Use a radius of 0 and MotionBlurImage() selects a suitable radius for you. Angle gives the angle of the blurring motion.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickMotionBlurImage(MagickWand *wand,
    const double radius,const double sigma,const double angle)
  MagickBooleanType MagickMotionBlurImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma,
    const double angle)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

<h5>angle</h5>
<ol><p>Apply the effect along this angle.</p></ol>

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

<p>MagickNegateImage() negates the colors in the reference image.  The Grayscale option means that only grayscale values within the image are negated.</p></ol>

<p>You can also reduce the influence of a particular channel with a gamma value of 0.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickNegateImage(MagickWand *wand,
    const MagickBooleanType gray)
  MagickBooleanType MagickNegateImage(MagickWand *wand,
    const ChannelType channel,const MagickBooleanType gray)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>gray</h5>
<ol><p>If MagickTrue, only negate grayscale pixels within the image.</p></ol>

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

<p>MagickNewImage() adds a blank image canvas of the specified size and background color to the wand.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickNewImage(MagickWand *wand,
    const size_t columns,const size_t rows,
    const PixelWand *background)
</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 image width.</p></ol>

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

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

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

<p>MagickNextImage() associates the next image in the image list with a magick wand.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickNextImage(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-image
_8c.html" target="source" name="MagickNormalizeImage">MagickNormalizeImage</a></h2>
<div class="doc-section">

<p>MagickNormalizeImage() enhances the contrast of a color image by adjusting the pixels color to span the entire range of colors available</p></ol>

<p>You can also reduce the influence of a particular channel with a gamma value of 0.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickNormalizeImage(MagickWand *wand)
  MagickBooleanType MagickNormalizeImageChannel(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

<p>MagickOilPaintImage() applies a special effect filter that simulates an oil painting.  Each pixel is replaced by the most frequent color occurring in a circular region defined by radius.</p></ol>

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

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

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

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

<h5>radius</h5>
<ol><p>the radius of the circular neighborhood.</p></ol>

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

<p>MagickOpaquePaintImage() changes any pixel that matches color with the color defined by fill.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickOpaquePaintImage(MagickWand *wand,
    const PixelWand *target,const PixelWand *fill,const double fuzz,
    const MagickBooleanType invert)
  MagickBooleanType MagickOpaquePaintImageChannel(MagickWand *wand,
    const ChannelType channel,const PixelWand *target,
    const PixelWand *fill,const double fuzz,const MagickBooleanType invert)
</pre>

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

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

<h5>channel</h5>
<ol><p>the channel(s).</p></ol>

<h5>target</h5>
<ol><p>Change this target color to the fill color within the image.</p></ol>

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

<h5>fuzz</h5>
<ol><p>By default target must match a particular pixel color exactly.  However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same.  For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p></ol>

<h5>invert</h5>
<ol><p>paint any pixel that does not match the target color.</p></ol>

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

<p>MagickOptimizeImageLayers() compares each image the GIF disposed forms of the previous image in the sequence.  From this it attempts to select the smallest cropped image to replace each frame, while preserving the results of the animation.</p></ol>

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

<pre class="code">
  MagickWand *MagickOptimizeImageLayers(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-image
_8c.html" target="source" name="MagickOrderedPosterizeImage">MagickOrderedPosterizeImage</a></h2>
<div class="doc-section">

<p>MagickOrderedPosterizeImage() performs an ordered dither based on a number of pre-defined dithering threshold maps, but over multiple intensity levels, which can be different for different channels, according to the input arguments.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickOrderedPosterizeImage(MagickWand *wand,
    const char *threshold_map)
  MagickBooleanType MagickOrderedPosterizeImageChannel(MagickWand *wand,
    const ChannelType channel,const char *threshold_map)
</pre>

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

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

<h5>channel</h5>
<ol><p>the channel or channels to be thresholded.</p></ol>

<h5>threshold_map</h5>
<ol><p>A string containing the name of the threshold dither map to use, followed by zero or more numbers representing the number of color levels tho dither between.</p></ol>

<p>Any level number less than 2 is equivelent to 2, and means only binary dithering will be applied to each color channel.</p></ol>

<p>No numbers also means a 2 level (bitmap) dither will be applied to all channels, while a single number is the number of levels applied to each channel in sequence.  More numbers will be applied in turn to each of the color channels.</p></ol>

<p>For example: "o3x3,6" generates a 6 level posterization of the image with a ordered 3x3 diffused pixel dither being applied between each level. While checker,8,8,4 will produce a 332 colormaped image with only a single checkerboard hash pattern (50 grey) between each color level, to basically double the number of color levels with a bare minimim of dithering.</p></ol>

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

<p>MagickPingImage() is like MagickReadImage() except the only valid information returned is the image width, height, size, and format.  It is designed to efficiently obtain this information from a file without reading the entire image sequence into memory.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickPingImage(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-image
_8c.html" target="source" name="MagickPingImageBlob">MagickPingImageBlob</a></h2>
<div class="doc-section">

<p>MagickPingImageBlob() pings an image or image sequence from a blob.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickPingImageBlob(MagickWand *wand,
    const void *blob,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>blob</h5>
<ol><p>the blob.</p></ol>

<h5>length</h5>
<ol><p>the blob length.</p></ol>

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

<p>MagickPingImageFile() pings an image or image sequence from an open file descriptor.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickPingImageFile(MagickWand *wand,FILE *file)
</pre>

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

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

<h5>file</h5>
<ol><p>the file descriptor.</p></ol>

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

<p>MagickPolaroidImage() simulates a Polaroid picture.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickPolaroidImage(MagickWand *wand,
    const DrawingWand *drawing_wand,const double angle)
</pre>

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

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

<h5>drawing_wand</h5>
<ol><p>the draw wand.</p></ol>

<h5>angle</h5>
<ol><p>Apply the effect along this angle.</p></ol>

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

<p>MagickPosterizeImage() reduces the image to a limited number of color level.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickPosterizeImage(MagickWand *wand,
    const unsigned levels,const MagickBooleanType dither)
</pre>

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

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

<h5>levels</h5>
<ol><p>Number of color levels allowed in each channel.  Very low values (2, 3, or 4) have the most visible effect.</p></ol>

<h5>dither</h5>
<ol><p>Set this integer value to something other than zero to dither the mapped image.</p></ol>

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

<p>MagickPreviewImages() tiles 9 thumbnails of the specified image with an image processing operation applied at varying strengths.  This helpful to quickly pin-point an appropriate parameter for an image processing operation.</p></ol>

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

<pre class="code">
  MagickWand *MagickPreviewImages(MagickWand *wand,
    const PreviewType preview)
</pre>

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

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

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

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

<p>MagickPreviousImage() assocates the previous image in an image list with the magick wand.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickPreviousImage(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-image
_8c.html" target="source" name="MagickQuantizeImage">MagickQuantizeImage</a></h2>
<div class="doc-section">

<p>MagickQuantizeImage() analyzes the colors within a reference image and chooses a fixed number of colors to represent the image.  The goal of the algorithm is to minimize the color difference between the input and output image while minimizing the processing time.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickQuantizeImage(MagickWand *wand,
    const size_t number_colors,const ColorspaceType colorspace,
    const size_t treedepth,const MagickBooleanType dither,
    const MagickBooleanType measure_error)
</pre>

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

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

<h5>number_colors</h5>
<ol><p>the number of colors.</p></ol>

<h5>colorspace</h5>
<ol><p>Perform color reduction in this colorspace, typically RGBColorspace.</p></ol>

<h5>treedepth</h5>
<ol><p>Normally, this integer value is zero or one.  A zero or one tells Quantize to choose a optimal tree depth of Log4(number_colors).      A tree of this depth generally allows the best representation of the reference image with the least amount of memory and the fastest computational speed.  In some cases, such as an image with low color dispersion (a few number of colors), a value other than Log4(number_colors) is required.  To expand the color tree completely, use a value of 8.</p></ol>

<h5>dither</h5>
<ol><p>A value other than zero distributes the difference between an original image and the corresponding color reduced image to neighboring pixels along a Hilbert curve.</p></ol>

<h5>measure_error</h5>
<ol><p>A value other than zero measures the difference between the original and quantized images.  This difference is the total quantization error.  The error is computed by summing over all pixels in an image the distance squared in RGB space between each reference pixel value and its quantized value.</p></ol>

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

<p>MagickQuantizeImages() analyzes the colors within a sequence of images and chooses a fixed number of colors to represent the image.  The goal of the algorithm is to minimize the color difference between the input and output image while minimizing the processing time.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickQuantizeImages(MagickWand *wand,
    const size_t number_colors,const ColorspaceType colorspace,
    const size_t treedepth,const MagickBooleanType dither,
    const MagickBooleanType measure_error)
</pre>

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

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

<h5>number_colors</h5>
<ol><p>the number of colors.</p></ol>

<h5>colorspace</h5>
<ol><p>Perform color reduction in this colorspace, typically RGBColorspace.</p></ol>

<h5>treedepth</h5>
<ol><p>Normally, this integer value is zero or one.  A zero or one tells Quantize to choose a optimal tree depth of Log4(number_colors).      A tree of this depth generally allows the best representation of the reference image with the least amount of memory and the fastest computational speed.  In some cases, such as an image with low color dispersion (a few number of colors), a value other than Log4(number_colors) is required.  To expand the color tree completely, use a value of 8.</p></ol>

<h5>dither</h5>
<ol><p>A value other than zero distributes the difference between an original image and the corresponding color reduced algorithm to neighboring pixels along a Hilbert curve.</p></ol>

<h5>measure_error</h5>
<ol><p>A value other than zero measures the difference between the original and quantized images.  This difference is the total quantization error.  The error is computed by summing over all pixels in an image the distance squared in RGB space between each reference pixel value and its quantized value.</p></ol>

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

<p>MagickRadialBlurImage() radial blurs an image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickRadialBlurImage(MagickWand *wand,
    const double angle)
  MagickBooleanType MagickRadialBlurImageChannel(MagickWand *wand,
    const ChannelType channel,const double angle)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>angle</h5>
<ol><p>the angle of the blur in degrees.</p></ol>

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

<p>MagickRaiseImage() creates a simulated three-dimensional button-like effect by lightening and darkening the edges of the image.  Members width and height of raise_info define the width of the vertical and horizontal edge of the effect.</p></ol>

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

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

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

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

<h5>width,height,x,y</h5>
<ol><p>Define the dimensions of the area to raise.</p></ol>

<h5>raise</h5>
<ol><p>A value other than zero creates a 3-D raise effect, otherwise it has a lowered effect.</p></ol>

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

<p>MagickRandomThresholdImage() changes the value of individual pixels based on the intensity of each pixel compared to threshold.  The result is a high-contrast, two color image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickRandomThresholdImage(MagickWand *wand,
    const double low,const double high)
  MagickBooleanType MagickRandomThresholdImageChannel(MagickWand *wand,
    const ChannelType channel,const double low,const double high)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>low,high</h5>
<ol><p>Specify the high and low thresholds.  These values range from 0 to QuantumRange.</p></ol>

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

<p>MagickReadImage() reads an image or image sequence.  The images are inserted at the current image pointer position.   Use MagickSetFirstIterator(), MagickSetLastIterator, or MagickSetImageIndex() to specify the current image pointer position at the beginning of the image list, the end, or anywhere in-between respectively.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickReadImage(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-image
_8c.html" target="source" name="MagickReadImageBlob">MagickReadImageBlob</a></h2>
<div class="doc-section">

<p>MagickReadImageBlob() reads an image or image sequence from a blob.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickReadImageBlob(MagickWand *wand,
    const void *blob,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>blob</h5>
<ol><p>the blob.</p></ol>

<h5>length</h5>
<ol><p>the blob length.</p></ol>

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

<p>MagickReadImageFile() reads an image or image sequence from an open file descriptor.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickReadImageFile(MagickWand *wand,FILE *file)
</pre>

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

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

<h5>file</h5>
<ol><p>the file descriptor.</p></ol>

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

<p>MagickReduceNoiseImage() smooths the contours of an image while still preserving edge information.  The algorithm works by replacing each pixel with its neighbor closest in value.  A neighbor is defined by radius.  Use a radius of 0 and ReduceNoise() selects a suitable radius for you.</p></ol>

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

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

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

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

<h5>radius</h5>
<ol><p>the radius of the pixel neighborhood.</p></ol>

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

<p>MagickRemapImage() replaces the colors of an image with the closest color from a reference image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickRemapImage(MagickWand *wand,
    const MagickWand *remap_wand,const DitherMethod method)
</pre>

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

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

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

<h5>method</h5>
<ol><p>choose from these dither methods: NoDitherMethod, RiemersmaDitherMethod, or FloydSteinbergDitherMethod.</p></ol>

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

<p>MagickRemoveImage() removes an image from the image list.</p></ol>

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

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

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

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

<h5>insert</h5>
<ol><p>the splice wand.</p></ol>

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

<p>MagickResampleImage() resample image to desired resolution.</p></ol>

<p>Bessel   Blackman   Box Catrom   Cubic      Gaussian Hanning  Hermite    Lanczos Mitchell Point      Quandratic Sinc     Triangle</p></ol>

<p>Most of the filters are FIR (finite impulse response), however, Bessel, Gaussian, and Sinc are IIR (infinite impulse response).  Bessel and Sinc are windowed (brought down to zero) with the Blackman filter.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickResampleImage(MagickWand *wand,
    const double x_resolution,const double y_resolution,
    const FilterTypes filter,const double blur)
</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 new image x resolution.</p></ol>

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

<h5>filter</h5>
<ol><p>Image filter to use.</p></ol>

<h5>blur</h5>
<ol><p>the blur factor where > 1 is blurry, < 1 is sharp.</p></ol>

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

<p>MagickResetImagePage() resets the Wand page canvas and position.</p></ol>

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

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

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

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

<h5>page</h5>
<ol><p>the relative page specification.</p></ol>

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

<p>MagickResizeImage() scales an image to the desired dimensions with one of these filters:</p>

<pre class="text">
      Bessel   Blackman   Box
      Catrom   CubicGaussian
      Hanning  Hermite    Lanczos
      Mitchell PointQuandratic
      Sinc     Triangle
</pre>

<p>Most of the filters are FIR (finite impulse response), however, Bessel, Gaussian, and Sinc are IIR (infinite impulse response).  Bessel and Sinc are windowed (brought down to zero) with the Blackman filter.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickResizeImage(MagickWand *wand,
    const size_t columns,const size_t rows,
    const FilterTypes filter,const double blur)
</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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>

<h5>filter</h5>
<ol><p>Image filter to use.</p></ol>

<h5>blur</h5>
<ol><p>the blur factor where > 1 is blurry, < 1 is sharp.</p></ol>

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

<p>MagickRollImage() offsets an image as defined by x and y.</p></ol>

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

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

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

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

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

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


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

<p>MagickRotateImage() rotates an image the specified number of degrees. Empty triangles left over from rotating the image are filled with the background color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickRotateImage(MagickWand *wand,
    const PixelWand *background,const double degrees)
</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>

<h5>degrees</h5>
<ol><p>the number of degrees to rotate the image.</p></ol>


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

<p>MagickSampleImage() scales an image to the desired dimensions with pixel sampling.  Unlike other scaling methods, this method does not introduce any additional color into the scaled image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSampleImage(MagickWand *wand,
    const size_t columns,const size_t 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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>


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

<p>MagickScaleImage() scales the size of an image to the given dimensions.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickScaleImage(MagickWand *wand,
    const size_t columns,const size_t 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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>


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

<p>MagickSegmentImage() segments an image by analyzing the histograms of the color components and identifying units that are homogeneous with the fuzzy C-means technique.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSegmentImage(MagickWand *wand,
    const ColorspaceType colorspace,const MagickBooleanType verbose,
    const double cluster_threshold,const double smooth_threshold)
</pre>

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

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

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

<h5>verbose</h5>
<ol><p>Set to MagickTrue to print detailed information about the identified classes.</p></ol>

<h5>cluster_threshold</h5>
<ol><p>This represents the minimum number of pixels contained in a hexahedra before it can be considered valid (expressed as a percentage).</p></ol>

<h5>smooth_threshold</h5>
<ol><p>the smoothing threshold eliminates noise in the second derivative of the histogram.  As the value is increased, you can expect a smoother second derivative.</p></ol>

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

<p>MagickSelectiveBlurImage() selectively blur an image within a contrast threshold. It is similar to the unsharpen mask that sharpens everything with contrast above a certain threshold.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSelectiveBlurImage(MagickWand *wand,
    const double radius,const double sigma,const double threshold)
  MagickBooleanType MagickSelectiveBlurImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma,
    const double threshold)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the gaussian, in pixels.</p></ol>

<h5>threshold</h5>
<ol><p>only pixels within this contrast threshold are included in the blur operation.</p></ol>

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

<p>MagickSeparateImageChannel() separates a channel from the image and returns a grayscale image.  A channel is a particular color component of each pixel in the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSeparateImageChannel(MagickWand *wand,
    const ChannelType channel)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

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

<p>MagickSepiaToneImage() applies a special effect to the image, similar to the effect achieved in a photo darkroom by sepia toning.  Threshold ranges from 0 to QuantumRange and is a measure of the extent of the sepia toning.  A threshold of 80 is a good starting point for a reasonable tone.</p></ol>

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

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

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

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

<h5>threshold</h5>
<ol><p>Define the extent of the sepia toning.</p></ol>

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

<p>MagickSetImage() replaces the last image returned by MagickSetImageIndex(), MagickNextImage(), MagickPreviousImage() with the images from the specified wand.</p></ol>

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

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

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

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

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

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

<p>MagickSetImageAlphaChannel() activates, deactivates, resets, or sets the alpha channel.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageAlphaChannel(MagickWand *wand,
    const AlphaChannelType alpha_type)
</pre>

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

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

<h5>alpha_type</h5>
<ol><p>the alpha channel type: ActivateAlphaChannel, DeactivateAlphaChannel, OpaqueAlphaChannel, or SetAlphaChannel.</p></ol>

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

<p>MagickSetImageBackgroundColor() sets the image background color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageBackgroundColor(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-image
_8c.html" target="source" name="MagickSetImageBias">MagickSetImageBias</a></h2>
<div class="doc-section">

<p>MagickSetImageBias() sets the image bias for any method that convolves an image (e.g. MagickConvolveImage()).</p></ol>

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

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

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

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

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

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

<p>MagickSetImageBluePrimary() sets the image chromaticity blue primary point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the blue primary x-point.</p></ol>

<h5>y</h5>
<ol><p>the blue primary y-point.</p></ol>

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

<p>MagickSetImageBorderColor() sets the image border color.</p></ol>

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

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

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

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

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

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

<p>MagickSetImageChannelDepth() sets the depth of a particular image channel.</p></ol>

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

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

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>depth</h5>
<ol><p>the image depth in bits.</p></ol>

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

<p>MagickSetImageClipMask() sets image clip mask.</p></ol>

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

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

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

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

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

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

<p>MagickSetImageColor() set the entire wand canvas to the specified color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageColor(MagickWand *wand,
    const PixelWand *color)
</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 image color.</p></ol>

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

<p>MagickSetImageColormapColor() sets the color of the specified colormap index.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageColormapColor(MagickWand *wand,
    const size_t index,const PixelWand *color)
</pre>

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

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

<h5>index</h5>
<ol><p>the offset into the image colormap.</p></ol>

<h5>color</h5>
<ol><p>Return the colormap color in this wand.</p></ol>

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

<p>MagickSetImageColorspace() sets the image colorspace.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageColorspace(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 image colorspace:   UndefinedColorspace, RGBColorspace, GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, HSLColorspace, or HWBColorspace.</p></ol>

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

<p>MagickSetImageCompose() sets the image composite operator, useful for specifying how to composite the image thumbnail when using the MagickMontageImage() method.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageCompose(MagickWand *wand,
    const CompositeOperator compose)
</pre>

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

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

<h5>compose</h5>
<ol><p>the image composite operator.</p></ol>

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

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

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

<pre class="code">
  MagickBooleanType MagickSetImageCompression(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 image compression type.</p></ol>

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

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

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

<pre class="code">
  MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand,
    const size_t 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 image compression tlityype.</p></ol>

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

<p>MagickSetImageDelay() sets the image delay.</p></ol>

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

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

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

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

<h5>delay</h5>
<ol><p>the image delay in ticks-per-second units.</p></ol>

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

<p>MagickSetImageDepth() sets the image depth.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageDepth(MagickWand *wand,
    const size_t 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 image depth in bits: 8, 16, or 32.</p></ol>

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

<p>MagickSetImageDispose() sets the image disposal method.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageDispose(MagickWand *wand,
    const DisposeType dispose)
</pre>

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

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

<h5>dispose</h5>
<ol><p>the image disposeal type.</p></ol>

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

<p>MagickSetImageExtent() sets the image size (i.e. columns & rows).</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageExtent(MagickWand *wand,
    const size_t columns,const unsigned 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 image width in pixels.</p></ol>

<h5>rows</h5>
<ol><p>The image height in pixels.</p></ol>

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

<p>MagickSetImageFilename() sets the filename of a particular image in a sequence.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageFilename(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-image
_8c.html" target="source" name="MagickSetImageFormat">MagickSetImageFormat</a></h2>
<div class="doc-section">

<p>MagickSetImageFormat() sets the format of a particular image in a sequence.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageFormat(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-image
_8c.html" target="source" name="MagickSetImageFuzz">MagickSetImageFuzz</a></h2>
<div class="doc-section">

<p>MagickSetImageFuzz() sets the image fuzz.</p></ol>

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

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

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

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

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

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

<p>MagickSetImageGamma() sets the image gamma.</p></ol>

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

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

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

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

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

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

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

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

<pre class="code">
  MagickBooleanType MagickSetImageGravity(MagickWand *wand,
    const GravityType gravity)
</pre>

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

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

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

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

<p>MagickSetImageGreenPrimary() sets the image chromaticity green primary point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the green primary x-point.</p></ol>

<h5>y</h5>
<ol><p>the green primary y-point.</p></ol>


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

<p>MagickSetImageInterlaceScheme() sets the image interlace scheme.</p></ol>

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

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

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

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

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

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

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

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

<pre class="code">
  MagickBooleanType MagickSetImageInterpolateMethod(MagickWand *wand,
    const InterpolatePixelMethod 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 image interpole pixel methods: choose from Undefined, Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor.</p></ol>

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

<p>MagickSetImageIterations() sets the image iterations.</p></ol>

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

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

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

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

<h5>delay</h5>
<ol><p>the image delay in 1/100th of a second.</p></ol>

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

<p>MagickSetImageMatte() sets the image matte channel.</p></ol>

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

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

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

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

<h5>matte</h5>
<ol><p>Set to MagickTrue to enable the image matte channel otherwise MagickFalse.</p></ol>

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

<p>MagickSetImageMatteColor() sets the image matte color.</p></ol>

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

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

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

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

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

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

<p>MagickSetImageOpacity() sets the image to the specified opacity level.</p></ol>

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

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

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

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

<h5>alpha</h5>
<ol><p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p></ol>

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

<p>MagickSetImageOrientation() sets the image orientation.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageOrientation(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 image orientation type.</p></ol>

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

<p>MagickSetImagePage() sets the page geometry of the image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImagePage(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></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-image
_8c.html" target="source" name="MagickSetImageProgressMonitor">MagickSetImageProgressMonitor</a></h2>
<div class="doc-section">

<p>MagickSetImageProgressMonitor() sets the wand image 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 MagickSetImageProgressMonitor method is:</p>

<pre class="code">
  MagickProgressMonitor MagickSetImageProgressMonitor(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-image
_8c.html" target="source" name="MagickSetImageRedPrimary">MagickSetImageRedPrimary</a></h2>
<div class="doc-section">

<p>MagickSetImageRedPrimary() sets the image chromaticity red primary point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the red primary x-point.</p></ol>

<h5>y</h5>
<ol><p>the red primary y-point.</p></ol>

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

<p>MagickSetImageRenderingIntent() sets the image rendering intent.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageRenderingIntent(MagickWand *wand,
    const RenderingIntent rendering_intent)
</pre>

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

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

<h5>rendering_intent</h5>
<ol><p>the image rendering intent: UndefinedIntent, SaturationIntent, PerceptualIntent, AbsoluteIntent, or RelativeIntent.</p></ol>

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

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

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

<pre class="code">
  MagickBooleanType MagickSetImageResolution(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-image
_8c.html" target="source" name="MagickSetImageScene">MagickSetImageScene</a></h2>
<div class="doc-section">

<p>MagickSetImageScene() sets the image scene.</p></ol>

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

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

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

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

<h5>delay</h5>
<ol><p>the image scene number.</p></ol>

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

<p>MagickSetImageTicksPerSecond() sets the image ticks-per-second.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageTicksPerSecond(MagickWand *wand,
    const ssize_t ticks_per-second)
</pre>

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

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

<h5>ticks_per_second</h5>
<ol><p>the units to use for the image delay.</p></ol>

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

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

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

<pre class="code">
  MagickBooleanType MagickSetImageType(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>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSetImageUnits">MagickSetImageUnits</a></h2>
<div class="doc-section">

<p>MagickSetImageUnits() sets the image units of resolution.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSetImageUnits(MagickWand *wand,
    const ResolutionType units)
</pre>

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

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

<h5>units</h5>
<ol><p>the image units of resolution : UndefinedResolution, PixelsPerInchResolution, or PixelsPerCentimeterResolution.</p></ol>

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

<p>MagickSetImageVirtualPixelMethod() sets the image virtual pixel method.</p></ol>

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

<pre class="code">
  VirtualPixelMethod MagickSetImageVirtualPixelMethod(MagickWand *wand,
    const VirtualPixelMethod 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 image virtual pixel method : UndefinedVirtualPixelMethod, ConstantVirtualPixelMethod,  EdgeVirtualPixelMethod, MirrorVirtualPixelMethod, or TileVirtualPixelMethod.</p></ol>

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

<p>MagickSetImageWhitePoint() sets the image chromaticity white point.</p></ol>

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

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

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

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

<h5>x</h5>
<ol><p>the white x-point.</p></ol>

<h5>y</h5>
<ol><p>the white y-point.</p></ol>

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

<p>MagickShadeImage() shines a distant light on an image to create a three-dimensional effect. You control the positioning of the light with azimuth and elevation; azimuth is measured in degrees off the x axis and elevation is measured in pixels above the Z axis.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickShadeImage(MagickWand *wand,
    const MagickBooleanType gray,const double azimuth,
    const double elevation)
</pre>

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

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

<h5>gray</h5>
<ol><p>A value other than zero shades the intensity of each pixel.</p></ol>

<h5>azimuth, elevation</h5>
<ol><p>Define the light source direction.</p></ol>

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

<p>MagickShadowImage() simulates an image shadow.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickShadowImage(MagickWand *wand,
    const double opacity,const double sigma,const ssize_t x,const ssize_t y)
</pre>

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

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

<h5>opacity</h5>
<ol><p>percentage transparency.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

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

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

<p>MagickSharpenImage() sharpens an image.  We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, the radius should be larger than sigma.  Use a radius of 0 and MagickSharpenImage() selects a suitable radius for you.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSharpenImage(MagickWand *wand,
    const double radius,const double sigma)
  MagickBooleanType MagickSharpenImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma)
</pre>

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

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

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

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

<p>MagickShaveImage() shaves pixels from the image edges.  It allocates the memory necessary for the new Image structure and returns a pointer to the new image.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickShaveImage(MagickWand *wand,
    const size_t columns,const size_t 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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>


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

<p>MagickShearImage() slides one edge of an image along the X or Y axis, creating a parallelogram.  An X direction shear slides an edge along the X axis, while a Y direction shear slides an edge along the Y axis.  The amount of the shear is controlled by a shear angle.  For X direction shears, x_shear is measured relative to the Y axis, and similarly, for Y direction shears y_shear is measured relative to the X axis.  Empty triangles left over from shearing the image are filled with the background color.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickShearImage(MagickWand *wand,
    const PixelWand *background,const double x_shear,onst double y_shear)
</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>

<h5>x_shear</h5>
<ol><p>the number of degrees to shear the image.</p></ol>

<h5>y_shear</h5>
<ol><p>the number of degrees to shear the image.</p></ol>

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

<p>MagickSigmoidalContrastImage() adjusts the contrast of an image with a non-linear sigmoidal contrast algorithm.  Increase the contrast of the image using a sigmoidal transfer function without saturating highlights or shadows.  Contrast indicates how much to increase the contrast (0 is none; 3 is typical; 20 is pushing it); mid-point indicates where midtones fall in the resultant image (0 is white; 50 is middle-gray; 100 is black).  Set sharpen to MagickTrue to increase the image contrast otherwise the contrast is reduced.</p></ol>

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

<pre class="code">
  MagickBooleanType MagickSigmoidalContrastImage(MagickWand *wand,
    const MagickBooleanType sharpen,const double alpha,const double beta)
  MagickBooleanType MagickSigmoidalContrastImageChannel(MagickWand *wand,
    const ChannelType channel,const MagickBooleanType sharpen,
    const double alpha,const double beta)
</pre>

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

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

<h5>channel</h5>
<ol><p>Identify which channel to level: RedChannel, GreenChannel,</p></ol>

<h5>sharpen</h5>
<ol><p>Increase or decrease image contrast.</p></ol>

<h5>alpha</h5>
<ol><p>strength of the contrast, the larger the number the more 'threshold-like' it becomes.</p></ol>

<h5>beta</h5>
<ol><p>midpoint of the function as a color value 0 to QuantumRange.</p></ol>

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

<p>MagickSimilarityImage() compares the reference image of the image and returns the best match offset.  In addition, it returns a similarity image such that an exact match location is completely white and if none of the pixels match, black, otherwise some gray level in-between.</p></ol>

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

<pre class="code">
  MagickWand *MagickSimilarityImage(MagickWand *wand,
    const MagickWand *reference,RectangeInfo *offset,double *similarity)
</pre>

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

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>reference</h5>
<ol><p>the reference wand.</p></ol>

<h5>offset</h5>
<ol><p>the best match offset of the reference image within the image.</p></ol>

<h5>similarity</h5>
<ol><p>the computed similarity between the images.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSketchImage">MagickSketchImage</a></h2>
<div class="doc-section">

<p>MagickSketchImage() simulates a pencil sketch.  We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, radius should be larger than sigma.  Use a radius of 0 and SketchImage() selects a suitable radius for you. Angle gives the angle of the blurring motion.</p></ol>

<p>The format of the MagickSketchImage method is:</p>

<pre class="code">
  MagickBooleanType MagickSketchImage(MagickWand *wand,
    const double radius,const double sigma,const double angle)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

<h5>angle</h5>
<ol><p>Apply the effect along this angle.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSolarizeImage">MagickSolarizeImage</a></h2>
<div class="doc-section">

<p>MagickSolarizeImage() applies a special effect to the image, similar to the effect achieved in a photo darkroom by selectively exposing areas of photo sensitive paper to light.  Threshold ranges from 0 to QuantumRange and is a measure of the extent of the solarization.</p></ol>

<p>The format of the MagickSolarizeImage method is:</p>

<pre class="code">
  MagickBooleanType MagickSolarizeImage(MagickWand *wand,
    const double threshold)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>threshold</h5>
<ol><p>Define the extent of the solarization.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSparseColorImage">MagickSparseColorImage</a></h2>
<div class="doc-section">

<p>MagickSparseColorImage(), given a set of coordinates, interpolates the colors found at those coordinates, across the whole image, using various methods.</p></ol>

<p>The format of the MagickSparseColorImage method is:</p>

<pre class="code">
  MagickBooleanType MagickSparseColorImage(MagickWand *wand,
    const ChannelType channel,const SparseColorMethod method,
    const size_t number_arguments,const double *arguments)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>image</h5>
<ol><p>the image to be sparseed.</p></ol>

<h5>method</h5>
<ol><p>the method of image sparseion.</p></ol>

<p>ArcSparseColorion will always ignore source image offset, and always 'bestfit' the destination image with the top left corner offset relative to the polar mapping center.</p></ol>

<p>Bilinear has no simple inverse mapping so will not allow 'bestfit' style of image sparseion.</p></ol>

<p>Affine, Perspective, and Bilinear, will do least squares fitting of the distrotion when more than the minimum number of control point pairs are provided.</p></ol>

<p>Perspective, and Bilinear, will fall back to a Affine sparseion when less than 4 control point pairs are provided. While Affine sparseions will let you use any number of control point pairs, that is Zero pairs is a No-Op (viewport only) distrotion, one pair is a translation and two pairs of control points will do a scale-rotate-translate, without any shearing.</p></ol>

<h5>number_arguments</h5>
<ol><p>the number of arguments given for this sparseion method.</p></ol>

<h5>arguments</h5>
<ol><p>the arguments for this sparseion method.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSpliceImage">MagickSpliceImage</a></h2>
<div class="doc-section">

<p>MagickSpliceImage() splices a solid color into the image.</p></ol>

<p>The format of the MagickSpliceImage method is:</p>

<pre class="code">
  MagickBooleanType MagickSpliceImage(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></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>width</h5>
<ol><p>the region width.</p></ol>

<h5>height</h5>
<ol><p>the region height.</p></ol>

<h5>x</h5>
<ol><p>the region x offset.</p></ol>

<h5>y</h5>
<ol><p>the region y offset.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSpreadImage">MagickSpreadImage</a></h2>
<div class="doc-section">

<p>MagickSpreadImage() is a special effects method that randomly displaces each pixel in a block defined by the radius parameter.</p></ol>

<p>The format of the MagickSpreadImage method is:</p>

<pre class="code">
  MagickBooleanType MagickSpreadImage(MagickWand *wand,const double radius)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>radius</h5>
<ol><p>Choose a random pixel in a neighborhood of this extent.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickSteganoImage">MagickSteganoImage</a></h2>
<div class="doc-section">

<p>MagickSteganoImage() hides a digital watermark within the image. Recover the hidden watermark later to prove that the authenticity of an image.  Offset defines the start position within the image to hide the watermark.</p></ol>

<p>The format of the MagickSteganoImage method is:</p>

<pre class="code">
  MagickWand *MagickSteganoImage(MagickWand *wand,
    const MagickWand *watermark_wand,const ssize_t offset)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>watermark_wand</h5>
<ol><p>the watermark wand.</p></ol>

<h5>offset</h5>
<ol><p>Start hiding at this offset into the image.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickStereoImage">MagickStereoImage</a></h2>
<div class="doc-section">

<p>MagickStereoImage() composites two images and produces a single image that is the composite of a left and right image of a stereo pair</p></ol>

<p>The format of the MagickStereoImage method is:</p>

<pre class="code">
  MagickWand *MagickStereoImage(MagickWand *wand,
    const MagickWand *offset_wand)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>offset_wand</h5>
<ol><p>Another image wand.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickStripImage">MagickStripImage</a></h2>
<div class="doc-section">

<p>MagickStripImage() strips an image of all profiles and comments.</p></ol>

<p>The format of the MagickStripImage method is:</p>

<pre class="code">
  MagickBooleanType MagickStripImage(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-image
_8c.html" target="source" name="MagickSwirlImage">MagickSwirlImage</a></h2>
<div class="doc-section">

<p>MagickSwirlImage() swirls the pixels about the center of the image, where degrees indicates the sweep of the arc through which each pixel is moved. You get a more dramatic effect as the degrees move from 1 to 360.</p></ol>

<p>The format of the MagickSwirlImage method is:</p>

<pre class="code">
  MagickBooleanType MagickSwirlImage(MagickWand *wand,const double degrees)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>degrees</h5>
<ol><p>Define the tightness of the swirling effect.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickTextureImage">MagickTextureImage</a></h2>
<div class="doc-section">

<p>MagickTextureImage() repeatedly tiles the texture image across and down the image canvas.</p></ol>

<p>The format of the MagickTextureImage method is:</p>

<pre class="code">
  MagickWand *MagickTextureImage(MagickWand *wand,
    const MagickWand *texture_wand)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>texture_wand</h5>
<ol><p>the texture wand</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickThresholdImage">MagickThresholdImage</a></h2>
<div class="doc-section">

<p>MagickThresholdImage() changes the value of individual pixels based on the intensity of each pixel compared to threshold.  The result is a high-contrast, two color image.</p></ol>

<p>The format of the MagickThresholdImage method is:</p>

<pre class="code">
  MagickBooleanType MagickThresholdImage(MagickWand *wand,
    const double threshold)
  MagickBooleanType MagickThresholdImageChannel(MagickWand *wand,
    const ChannelType channel,const double threshold)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>threshold</h5>
<ol><p>Define the threshold value.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickThumbnailImage">MagickThumbnailImage</a></h2>
<div class="doc-section">

<p>MagickThumbnailImage()  changes the size of an image to the given dimensions and removes any associated profiles.  The goal is to produce small low cost thumbnail images suited for display on the Web.</p></ol>

<p>The format of the MagickThumbnailImage method is:</p>

<pre class="code">
  MagickBooleanType MagickThumbnailImage(MagickWand *wand,
    const size_t columns,const size_t 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 number of columns in the scaled image.</p></ol>

<h5>rows</h5>
<ol><p>the number of rows in the scaled image.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickTintImage">MagickTintImage</a></h2>
<div class="doc-section">

<p>MagickTintImage() applies a color vector to each pixel in the image.  The length of the vector is 0 for black and white and at its maximum for the midtones.  The vector weighting function is f(x)=(1-(4.0*((x-0.5)*(x-0.5)))).</p></ol>

<p>The format of the MagickTintImage method is:</p>

<pre class="code">
  MagickBooleanType MagickTintImage(MagickWand *wand,
    const PixelWand *tint,const PixelWand *opacity)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>tint</h5>
<ol><p>the tint pixel wand.</p></ol>

<h5>opacity</h5>
<ol><p>the opacity pixel wand.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickTransformImage">MagickTransformImage</a></h2>
<div class="doc-section">

<p>MagickTransformImage() is a convenience method that behaves like MagickResizeImage() or MagickCropImage() but accepts scaling and/or cropping information as a region geometry specification.  If the operation fails, a NULL image handle is returned.</p></ol>

<p>The format of the MagickTransformImage method is:</p>

<pre class="code">
  MagickWand *MagickTransformImage(MagickWand *wand,const char *crop,
    const char *geometry)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>crop</h5>
<ol><p>A crop geometry string.  This geometry defines a subregion of the image to crop.</p></ol>

<h5>geometry</h5>
<ol><p>An image geometry string.  This geometry defines the final size of the image.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickTransformImageColorspace">MagickTransformImageColorspace</a></h2>
<div class="doc-section">

<p>MagickTransformImageColorspace() transform the image colorspace.</p></ol>

<p>The format of the MagickTransformImageColorspace method is:</p>

<pre class="code">
  MagickBooleanType MagickTransformImageColorspace(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 image colorspace:   UndefinedColorspace, RGBColorspace, GRAYColorspace, TransparentColorspace, OHTAColorspace, XYZColorspace, YCbCrColorspace, YCCColorspace, YIQColorspace, YPbPrColorspace, YPbPrColorspace, YUVColorspace, CMYKColorspace, sRGBColorspace, HSLColorspace, or HWBColorspace.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickTransparentPaintImage">MagickTransparentPaintImage</a></h2>
<div class="doc-section">

<p>MagickTransparentPaintImage() changes any pixel that matches color with the color defined by fill.</p></ol>

<p>The format of the MagickTransparentPaintImage method is:</p>

<pre class="code">
  MagickBooleanType MagickTransparentPaintImage(MagickWand *wand,
    const PixelWand *target,const double alpha,const double fuzz,
    const MagickBooleanType invert)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>target</h5>
<ol><p>Change this target color to specified opacity value within the image.</p></ol>

<h5>alpha</h5>
<ol><p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p></ol>

<h5>fuzz</h5>
<ol><p>By default target must match a particular pixel color exactly.  However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same.  For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p></ol>

<h5>invert</h5>
<ol><p>paint any pixel that does not match the target color.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickTransposeImage">MagickTransposeImage</a></h2>
<div class="doc-section">

<p>MagickTransposeImage() creates a vertical mirror image by reflecting the pixels around the central x-axis while rotating them 90-degrees.</p></ol>

<p>The format of the MagickTransposeImage method is:</p>

<pre class="code">
  MagickBooleanType MagickTransposeImage(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-image
_8c.html" target="source" name="MagickTransverseImage">MagickTransverseImage</a></h2>
<div class="doc-section">

<p>MagickTransverseImage() creates a horizontal mirror image by reflecting the pixels around the central y-axis while rotating them 270-degrees.</p></ol>

<p>The format of the MagickTransverseImage method is:</p>

<pre class="code">
  MagickBooleanType MagickTransverseImage(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-image
_8c.html" target="source" name="MagickTrimImage">MagickTrimImage</a></h2>
<div class="doc-section">

<p>MagickTrimImage() remove edges that are the background color from the image.</p></ol>

<p>The format of the MagickTrimImage method is:</p>

<pre class="code">
  MagickBooleanType MagickTrimImage(MagickWand *wand,const double fuzz)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>fuzz</h5>
<ol><p>By default target must match a particular pixel color exactly.  However, in many cases two colors may differ by a small amount. The fuzz member of image defines how much tolerance is acceptable to consider two colors as the same.  For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color for the purposes of the floodfill.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickUniqueImageColors">MagickUniqueImageColors</a></h2>
<div class="doc-section">

<p>MagickUniqueImageColors() discards all but one of any pixel color.</p></ol>

<p>The format of the MagickUniqueImageColors method is:</p>

<pre class="code">
  MagickBooleanType MagickUniqueImageColors(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-image
_8c.html" target="source" name="MagickUnsharpMaskImage">MagickUnsharpMaskImage</a></h2>
<div class="doc-section">

<p>MagickUnsharpMaskImage() sharpens an image.  We convolve the image with a Gaussian operator of the given radius and standard deviation (sigma). For reasonable results, radius should be larger than sigma.  Use a radius of 0 and UnsharpMaskImage() selects a suitable radius for you.</p></ol>

<p>The format of the MagickUnsharpMaskImage method is:</p>

<pre class="code">
  MagickBooleanType MagickUnsharpMaskImage(MagickWand *wand,
    const double radius,const double sigma,const double amount,
    const double threshold)
  MagickBooleanType MagickUnsharpMaskImageChannel(MagickWand *wand,
    const ChannelType channel,const double radius,const double sigma,
    const double amount,const double threshold)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>channel</h5>
<ol><p>the image channel(s).</p></ol>

<h5>radius</h5>
<ol><p>the radius of the Gaussian, in pixels, not counting the center pixel.</p></ol>

<h5>sigma</h5>
<ol><p>the standard deviation of the Gaussian, in pixels.</p></ol>

<h5>amount</h5>
<ol><p>the percentage of the difference between the original and the blur image that is added back into the original.</p></ol>

<h5>threshold</h5>
<ol><p>the threshold in pixels needed to apply the diffence amount.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickVignetteImage">MagickVignetteImage</a></h2>
<div class="doc-section">

<p>MagickVignetteImage() softens the edges of the image in vignette style.</p></ol>

<p>The format of the MagickVignetteImage method is:</p>

<pre class="code">
  MagickBooleanType MagickVignetteImage(MagickWand *wand,
    const double black_point,const double white_point,const ssize_t x,
    const ssize_t y)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>black_point</h5>
<ol><p>the black point.</p></ol>

<h5>white_point</h5>
<ol><p>the white point.</p></ol>

<h5>x, y</h5>
<ol><p>Define the x and y ellipse offset.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickWaveImage">MagickWaveImage</a></h2>
<div class="doc-section">

<p>MagickWaveImage()  creates a "ripple" effect in the image by shifting the pixels vertically along a sine wave whose amplitude and wavelength is specified by the given parameters.</p></ol>

<p>The format of the MagickWaveImage method is:</p>

<pre class="code">
  MagickBooleanType MagickWaveImage(MagickWand *wand,const double amplitude,
    const double wave_length)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>amplitude, wave_length</h5>
<ol><p>Define the amplitude and wave length of the sine wave.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickWhiteThresholdImage">MagickWhiteThresholdImage</a></h2>
<div class="doc-section">

<p>MagickWhiteThresholdImage() is like ThresholdImage() but  force all pixels above the threshold into white while leaving all pixels below the threshold unchanged.</p></ol>

<p>The format of the MagickWhiteThresholdImage method is:</p>

<pre class="code">
  MagickBooleanType MagickWhiteThresholdImage(MagickWand *wand,
    const PixelWand *threshold)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>threshold</h5>
<ol><p>the pixel wand.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickWriteImage">MagickWriteImage</a></h2>
<div class="doc-section">

<p>MagickWriteImage() writes an image to the specified filename.  If the filename parameter is NULL, the image is written to the filename set by MagickReadImage() or MagickSetImageFilename().</p></ol>

<p>The format of the MagickWriteImage method is:</p>

<pre class="code">
  MagickBooleanType MagickWriteImage(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-image
_8c.html" target="source" name="MagickWriteImageFile">MagickWriteImageFile</a></h2>
<div class="doc-section">

<p>MagickWriteImageFile() writes an image to an open file descriptor.</p></ol>

<p>The format of the MagickWriteImageFile method is:</p>

<pre class="code">
  MagickBooleanType MagickWriteImageFile(MagickWand *wand,FILE *file)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>file</h5>
<ol><p>the file descriptor.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickWriteImages">MagickWriteImages</a></h2>
<div class="doc-section">

<p>MagickWriteImages() writes an image or image sequence.</p></ol>

<p>The format of the MagickWriteImages method is:</p>

<pre class="code">
  MagickBooleanType MagickWriteImages(MagickWand *wand,
    const char *filename,const MagickBooleanType adjoin)
</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>

<h5>adjoin</h5>
<ol><p>join images into a single multi-image file.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/magick-image
_8c.html" target="source" name="MagickWriteImagesFile">MagickWriteImagesFile</a></h2>
<div class="doc-section">

<p>MagickWriteImagesFile() writes an image sequence to an open file descriptor.</p></ol>

<p>The format of the MagickWriteImagesFile method is:</p>

<pre class="code">
  MagickBooleanType MagickWriteImagesFile(MagickWand *wand,FILE *file)
</pre>

<p>A description of each parameter follows:</p></ol>

<h5>wand</h5>
<ol><p>the magick wand.</p></ol>

<h5>file</h5>
<ol><p>the file descriptor.</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://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-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>
  <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>
