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

<a href="http://www.networkredux.com">
  <img src="../../images/networkredux.png" alt="[sponsor]"
  style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a>
<div class="sponsbox">
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting" href="http://www.micfo.com">Web Hosting</a><!-- 209901010090s golestan -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Deals" href="http://www.webhostingdeals.org">Web Hosting Deals</a><!-- 201111010270 chee.hoa darin -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingsecretrevealed.com">Web Hosting Secret Revealed</a><!-- 201204010540 iamchee jerry -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Break" href="http://www.webhostingbreak.com">Web Hosting Break</a><!-- 201109010090 ian@ian-m... -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Website Hosting" href="http://www.hostreviewgeeks.com">Website Hosting</a><!-- 201110010090 alexanian media -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Hotel München" href="http://www.messehotel-erb-muenchen.de">Hotel München</a><!-- 201111010450 cerb -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Best Web Hosting" href="http://webhostinggeeks.com">Best Web Hosting</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Reviews" href="http://www.webhostingmasters.com">Web Hosting Reviews</a><!-- 201107011500 affliatelabel -->
</div>
<div  class="sponsor">
  <a rel="follow" title="Sponsor: Web Hosting Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
   <a rel="follow" title="Sponsor: Notebook Reparatur" href="http://www.atlasmultimedia.de">Notebook Reparatur</a><!-- 2011100100025 atlas.multimedia-->
</div>
</div>
</div>
</div>

<div class="eastbar">

</div>

<div class="main">

<h1>Module deprecate Methods</h1>
<p class="navigation-index">[<a href="#MagickAverageImages">MagickAverageImages</a> &bull; <a href="#ClonePixelView">ClonePixelView</a> &bull; <a href="#DestroyPixelView">DestroyPixelView</a> &bull; <a href="#DuplexTransferPixelViewIterator">DuplexTransferPixelViewIterator</a> &bull; <a href="#GetPixelViewException">GetPixelViewException</a> &bull; <a href="#GetPixelViewHeight">GetPixelViewHeight</a> &bull; <a href="#GetPixelViewIterator">GetPixelViewIterator</a> &bull; <a href="#GetPixelViewPixels">GetPixelViewPixels</a> &bull; <a href="#GetPixelViewWand">GetPixelViewWand</a> &bull; <a href="#GetPixelViewWidth">GetPixelViewWidth</a> &bull; <a href="#GetPixelViewX">GetPixelViewX</a> &bull; <a href="#GetPixelViewY">GetPixelViewY</a> &bull; <a href="#IsPixelView">IsPixelView</a> &bull; <a href="#MagickClipPathImage">MagickClipPathImage</a> &bull; <a href="#DrawGetFillAlpha">DrawGetFillAlpha</a> &bull; <a href="#DrawGetStrokeAlpha">DrawGetStrokeAlpha</a> &bull; <a href="#DrawPeekGraphicWand">DrawPeekGraphicWand</a> &bull; <a href="#DrawPopGraphicContext">DrawPopGraphicContext</a> &bull; <a href="#DrawPushGraphicContext">DrawPushGraphicContext</a> &bull; <a href="#DrawSetFillAlpha">DrawSetFillAlpha</a> &bull; <a href="#DrawSetStrokeAlpha">DrawSetStrokeAlpha</a> &bull; <a href="#MagickColorFloodfillImage">MagickColorFloodfillImage</a> &bull; <a href="#MagickDescribeImage">MagickDescribeImage</a> &bull; <a href="#MagickFlattenImages">MagickFlattenImages</a> &bull; <a href="#MagickGetImageAttribute">MagickGetImageAttribute</a> &bull; <a href="#MagickGetImageMatte">MagickGetImageMatte</a> &bull; <a href="#MagickGetImagePixels">MagickGetImagePixels</a> &bull; <a href="#MagickGetImageSize">MagickGetImageSize</a> &bull; <a href="#MagickMapImage">MagickMapImage</a> &bull; <a href="#MagickMatteFloodfillImage">MagickMatteFloodfillImage</a> &bull; <a href="#MagickMedianFilterImage">MagickMedianFilterImage</a> &bull; <a href="#MagickMinimumImages">MagickMinimumImages</a> &bull; <a href="#MagickModeImage">MagickModeImage</a> &bull; <a href="#MagickMosaicImages">MagickMosaicImages</a> &bull; <a href="#MagickOpaqueImage">MagickOpaqueImage</a> &bull; <a href="#MagickPaintFloodfillImage">MagickPaintFloodfillImage</a> &bull; <a href="#MagickPaintOpaqueImage">MagickPaintOpaqueImage</a> &bull; <a href="#MagickPaintTransparentImage">MagickPaintTransparentImage</a> &bull; <a href="#MagickRecolorImage">MagickRecolorImage</a> &bull; <a href="#MagickReduceNoiseImage">MagickReduceNoiseImage</a> &bull; <a href="#MagickMaximumImages">MagickMaximumImages</a> &bull; <a href="#MagickSetImageAttribute">MagickSetImageAttribute</a> &bull; <a href="#MagickSetImageIndex">MagickSetImageIndex</a> &bull; <a href="#MagickTransparentImage">MagickTransparentImage</a> &bull; <a href="#MagickRegionOfInterestImage">MagickRegionOfInterestImage</a> &bull; <a href="#MagickSetImagePixels">MagickSetImagePixels</a> &bull; <a href="#MagickWriteImageBlob">MagickWriteImageBlob</a> &bull; <a href="#NewPixelView">NewPixelView</a> &bull; <a href="#NewPixelViewRegion">NewPixelViewRegion</a> &bull; <a href="#PixelGetNextRow">PixelGetNextRow</a> &bull; <a href="#PixelIteratorGetException">PixelIteratorGetException</a> &bull; <a href="#SetPixelViewIterator">SetPixelViewIterator</a> &bull; <a href="#TransferPixelViewIterator">TransferPixelViewIterator</a> &bull; <a href="#UpdatePixelViewIterator">UpdatePixelViewIterator</a>]</p>

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

<p>MagickAverageImages() average a set of images.</p>

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

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

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

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

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

<p>ClonePixelView() makes a copy of the specified pixel view.</p>

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

<pre class="code">
  PixelView *ClonePixelView(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>DestroyPixelView() deallocates memory associated with a pixel view.</p>

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

<pre class="code">
  PixelView *DestroyPixelView(PixelView *pixel_view,
    const size_t number_wands,const size_t number_threads)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

<h5>number_wand</h5>
<p>the number of pixel wands.</p>

<h5>number_threads</h5>
<p>number of threads.</p>

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

<p>DuplexTransferPixelViewIterator() iterates over three pixel views in parallel and calls your transfer method for each scanline of the view.  The source and duplex pixel region is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension.  However, the destination pixel view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p>

<p>Use this pragma:</p>

<pre class="text">
      #pragma omp critical
</pre>

<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p>

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

<pre class="code">
  MagickBooleanType DuplexTransferPixelViewIterator(PixelView *source,
    PixelView *duplex,PixelView *destination,
    DuplexTransferPixelViewMethod transfer,void *context)
</pre>

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

<h5>source</h5>
<p>the source pixel view.</p>

<h5>duplex</h5>
<p>the duplex pixel view.</p>

<h5>destination</h5>
<p>the destination pixel view.</p>

<h5>transfer</h5>
<p>the transfer callback method.</p>

<h5>context</h5>
<p>the user defined context.</p>

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

<p>GetPixelViewException() returns the severity, reason, and description of any error that occurs when utilizing a pixel view.</p>

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

<pre class="code">
  char *GetPixelViewException(const PixelWand *pixel_view,
    ExceptionType *severity)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel pixel_view.</p>

<h5>severity</h5>
<p>the severity of the error is returned here.</p>

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

<p>GetPixelViewHeight() returns the pixel view height.</p>

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

<pre class="code">
  size_t GetPixelViewHeight(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>GetPixelViewIterator() iterates over the pixel view in parallel and calls your get method for each scanline of the view.  The pixel region is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension.  Any updates to the pixels in your callback are ignored.</p>

<p>Use this pragma:</p>

<pre class="text">
      #pragma omp critical
</pre>

<p>to define a section of code in your callback get method that must be executed by a single thread at a time.</p>

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

<pre class="code">
  MagickBooleanType GetPixelViewIterator(PixelView *source,
    GetPixelViewMethod get,void *context)
</pre>

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

<h5>source</h5>
<p>the source pixel view.</p>

<h5>get</h5>
<p>the get callback method.</p>

<h5>context</h5>
<p>the user defined context.</p>

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

<p>GetPixelViewPixels() returns the pixel view pixel_wands.</p>

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

<pre class="code">
  PixelWand *GetPixelViewPixels(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>GetPixelViewWand() returns the magick wand associated with the pixel view.</p>

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

<pre class="code">
  MagickWand *GetPixelViewWand(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>GetPixelViewWidth() returns the pixel view width.</p>

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

<pre class="code">
  size_t GetPixelViewWidth(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>GetPixelViewX() returns the pixel view x offset.</p>

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

<pre class="code">
  ssize_t GetPixelViewX(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>GetPixelViewY() returns the pixel view y offset.</p>

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

<pre class="code">
  ssize_t GetPixelViewY(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>IsPixelView() returns MagickTrue if the the parameter is verified as a pixel view container.</p>

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

<pre class="code">
  MagickBooleanType IsPixelView(const PixelView *pixel_view)
</pre>

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

<h5>pixel_view</h5>
<p>the pixel view.</p>

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

<p>MagickClipPathImage() 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>

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

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

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

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

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

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

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

<p>DrawGetFillAlpha() returns the alpha used when drawing using the fill color or fill texture.  Fully opaque is 1.0.</p>

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

<pre class="code">
  double DrawGetFillAlpha(const DrawingWand *wand)
</pre>

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

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

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

<p>DrawGetStrokeAlpha() returns the alpha of stroked object outlines.</p>

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

<pre class="code">
  double DrawGetStrokeAlpha(const DrawingWand *wand)
</pre>

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

<h5>wand</h5>
<p>the drawing wand. </p>
 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/deprecate_8c.html" id="DrawPeekGraphicWand">DrawPeekGraphicWand</a></h2>
<div class="doc-section">

<p>DrawPeekGraphicWand() returns the current drawing wand.</p>

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

<pre class="code">
  DrawInfo *DrawPeekGraphicWand(const DrawingWand *wand)
</pre>

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

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

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

<p>DrawPopGraphicContext() destroys the current drawing wand and returns to the previously pushed drawing wand. Multiple drawing wands may exist. It is an error to attempt to pop more drawing wands than have been pushed, and it is proper form to pop all drawing wands which have been pushed.</p>

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

<pre class="code">
  MagickBooleanType DrawPopGraphicContext(DrawingWand *wand)
</pre>

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

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

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

<p>DrawPushGraphicContext() clones the current drawing wand to create a new drawing wand.  The original drawing wand(s) may be returned to by invoking PopDrawingWand().  The drawing wands are stored on a drawing wand stack.  For every Pop there must have already been an equivalent Push.</p>

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

<pre class="code">
  MagickBooleanType DrawPushGraphicContext(DrawingWand *wand)
</pre>

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

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

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

<p>DrawSetFillAlpha() sets the alpha to use when drawing using the fill color or fill texture.  Fully opaque is 1.0.</p>

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

<pre class="code">
  void DrawSetFillAlpha(DrawingWand *wand,const double fill_alpha)
</pre>

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

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

<h5>fill_alpha</h5>
<p>fill alpha</p>

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

<p>DrawSetStrokeAlpha() specifies the alpha of stroked object outlines.</p>

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

<pre class="code">
  void DrawSetStrokeAlpha(DrawingWand *wand,const double stroke_alpha)
</pre>

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

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

<h5>stroke_alpha</h5>
<p>stroke alpha.  The value 1.0 is opaque.</p>

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

<p>MagickColorFloodfillImage() 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>

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

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

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

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

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

<h5>fuzz</h5>
<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>

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

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

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

<p>MagickDescribeImage() identifies an image by printing its attributes to the file.  Attributes include the image width, height, size, and others.</p>

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

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

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

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

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

<p>MagickFlattenImages() merges a sequence of images.  This useful for combining Photoshop layers into a single image.</p>

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

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

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

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

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

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

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

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

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

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

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

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

<p>MagickGetImageMatte() returns MagickTrue if the image has a matte channel otherwise MagickFalse.</p>

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

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

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

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

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

<p>MagickGetImagePixels() 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>

<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">
  MagickGetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
</pre>

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

<pre class="code">
  MagickBooleanType MagickGetImagePixels(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>

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

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

<h5>map</h5>
<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>

<h5>storage</h5>
<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>

<h5>pixels</h5>
<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>

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

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

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

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

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

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

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

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

<p>MagickMapImage() replaces the colors of an image with the closest color from a reference image.</p>

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

<pre class="code">
  MagickBooleanType MagickMapImage(MagickWand *wand,
    const MagickWand *map_wand,const MagickBooleanType dither)
</pre>

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

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

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

<h5>dither</h5>
<p>Set this integer value to something other than zero to dither the mapped image.</p>

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

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

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

<pre class="code">
  MagickBooleanType MagickMatteFloodfillImage(MagickWand *wand,
    const double alpha,const double fuzz,const PixelWand *bordercolor,
    const ssize_t x,const ssize_t y)
</pre>

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

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

<h5>alpha</h5>
<p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p>

<h5>fuzz</h5>
<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>

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/deprecate_8c.html" id="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>

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

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

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

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

<p>MagickMinimumImages() returns the minimum intensity of an image sequence.</p>

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

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

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

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

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

<p>MagickModeImage() makes each pixel the 'predominate color' of the neighborhood of the specified radius.</p>

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

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

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

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

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

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

<p>MagickMosaicImages() inlays an image sequence to form a single coherent picture.  It returns a wand with each image in the sequence composited at the location defined by the page offset of the image.</p>

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

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

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

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

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

<p>MagickOpaqueImage() changes any pixel that matches color with the color defined by fill.</p>

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

<pre class="code">
  MagickBooleanType MagickOpaqueImage(MagickWand *wand,
    const PixelWand *target,const PixelWand *fill,const double fuzz)
</pre>

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

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

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

<h5>target</h5>
<p>Change this target color to the fill color within the image.</p>

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

<h5>fuzz</h5>
<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>

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

<p>MagickPaintFloodfillImage() 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>

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

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

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

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

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

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

<h5>fuzz</h5>
<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>

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

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

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

<p>MagickPaintOpaqueImage() changes any pixel that matches color with the color defined by fill.</p>

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

<pre class="code">
  MagickBooleanType MagickPaintOpaqueImage(MagickWand *wand,
    const PixelWand *target,const PixelWand *fill,const double fuzz)
  MagickBooleanType MagickPaintOpaqueImageChannel(MagickWand *wand,
    const ChannelType channel,const PixelWand *target,
    const PixelWand *fill,const double fuzz)
</pre>

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

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

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

<h5>target</h5>
<p>Change this target color to the fill color within the image.</p>

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

<h5>fuzz</h5>
<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>

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

<p>MagickPaintTransparentImage() changes any pixel that matches color with the color defined by fill.</p>

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

<pre class="code">
  MagickBooleanType MagickPaintTransparentImage(MagickWand *wand,
    const PixelWand *target,const double alpha,const double fuzz)
</pre>

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

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

<h5>target</h5>
<p>Change this target color to specified opacity value within the image.</p>

<h5>alpha</h5>
<p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p>

<h5>fuzz</h5>
<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>

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

<p>MagickRecolorImage() 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>

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

<pre class="code">
  MagickBooleanType MagickRecolorImage(MagickWand *wand,
    const size_t order,const double *color_matrix)
</pre>

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

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

<h5>order</h5>
<p>the number of columns and rows in the color matrix.</p>

<h5>color_matrix</h5>
<p>An array of doubles representing the color matrix.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickWand/deprecate_8c.html" id="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>

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

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

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

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

<p>MagickMaximumImages() returns the maximum intensity of an image sequence.</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

<p>MagickSetImageIndex() set the current image to the position of the list specified with the index parameter.</p>

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

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

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

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

<h5>index</h5>
<p>the scene number.</p>

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

<p>MagickTransparentImage() changes any pixel that matches color with the color defined by fill.</p>

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

<pre class="code">
  MagickBooleanType MagickTransparentImage(MagickWand *wand,
    const PixelWand *target,const double alpha,const double fuzz)
</pre>

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

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

<h5>target</h5>
<p>Change this target color to specified opacity value within the image.</p>

<h5>alpha</h5>
<p>the level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.</p>

<h5>fuzz</h5>
<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>

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

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

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

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

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

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

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

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

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

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

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

<p>MagickSetImagePixels() 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>

<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">
  MagickSetImagePixels(wand,0,0,640,1,"RGB",CharPixel,pixels);
</pre>

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

<pre class="code">
  MagickBooleanType MagickSetImagePixels(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>

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

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

<h5>map</h5>
<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>

<h5>storage</h5>
<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>

<h5>pixels</h5>
<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>

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

<p>MagickWriteImageBlob() 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>

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

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

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

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

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

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

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

<p>NewPixelView() returns a pixel view required for all other methods in the Pixel View API.</p>

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

<pre class="code">
  PixelView *NewPixelView(MagickWand *wand)
</pre>

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

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

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

<p>NewPixelViewRegion() returns a pixel view required for all other methods in the Pixel View API.</p>

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

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

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

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

<h5>x,y,columns,rows</h5>
<p>These values define the perimeter of a region of pixel_wands view.</p>

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

<p>PixelGetNextRow() returns the next row as an array of pixel wands from the pixel iterator.</p>

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

<pre class="code">
  PixelWand **PixelGetNextRow(PixelIterator *iterator,
    size_t *number_wands)
</pre>

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

<h5>iterator</h5>
<p>the pixel iterator.</p>

<h5>number_wands</h5>
<p>the number of pixel wands.</p>

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

<p>PixelIteratorGetException() returns the severity, reason, and description of any error that occurs when using other methods in this API.</p>

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

<pre class="code">
  char *PixelIteratorGetException(const Pixeliterator *iterator,
    ExceptionType *severity)
</pre>

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

<h5>iterator</h5>
<p>the pixel iterator.</p>

<h5>severity</h5>
<p>the severity of the error is returned here.</p>

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

<p>SetPixelViewIterator() iterates over the pixel view in parallel and calls your set method for each scanline of the view.  The pixel region is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension.  The pixels are initiallly undefined and any settings you make in the callback method are automagically synced back to your image.</p>

<p>Use this pragma:</p>

<pre class="text">
      #pragma omp critical
</pre>

<p>to define a section of code in your callback set method that must be executed by a single thread at a time.</p>

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

<pre class="code">
  MagickBooleanType SetPixelViewIterator(PixelView *destination,
    SetPixelViewMethod set,void *context)
</pre>

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

<h5>destination</h5>
<p>the pixel view.</p>

<h5>set</h5>
<p>the set callback method.</p>

<h5>context</h5>
<p>the user defined context.</p>

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

<p>TransferPixelViewIterator() iterates over two pixel views in parallel and calls your transfer method for each scanline of the view.  The source pixel region is not confined to the image canvas-- that is you can include negative offsets or widths or heights that exceed the image dimension. However, the destination pixel view is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.</p>

<p>Use this pragma:</p>

<pre class="text">
      #pragma omp critical
</pre>

<p>to define a section of code in your callback transfer method that must be executed by a single thread at a time.</p>

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

<pre class="code">
  MagickBooleanType TransferPixelViewIterator(PixelView *source,
    PixelView *destination,TransferPixelViewMethod transfer,void *context)
</pre>

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

<h5>source</h5>
<p>the source pixel view.</p>

<h5>destination</h5>
<p>the destination pixel view.</p>

<h5>transfer</h5>
<p>the transfer callback method.</p>

<h5>context</h5>
<p>the user defined context.</p>

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

<p>UpdatePixelViewIterator() iterates over the pixel view in parallel and calls your update method for each scanline of the view.  The pixel region is confined to the image canvas-- that is no negative offsets or widths or heights that exceed the image dimension are permitted.  Updates to pixels in your callback are automagically synced back to the image.</p>

<p>Use this pragma:</p>

<pre class="text">
      #pragma omp critical
</pre>

<p>to define a section of code in your callback update method that must be executed by a single thread at a time.</p>

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

<pre class="code">
  MagickBooleanType UpdatePixelViewIterator(PixelView *source,
    UpdatePixelViewMethod update,void *context)
</pre>

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

<h5>source</h5>
<p>the source pixel view.</p>

<h5>update</h5>
<p>the update callback method.</p>

<h5>context</h5>
<p>the user defined context.</p>

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