
<!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: Porting to ImageMagick Version 7</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="porting, to, imagemagick, version, 7, 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="canonical" href="http://www.imagemagick.org" />
  <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" />
  <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" media="screen" />
  <style type="text/css" media="all">
    @import url("../www/magick.css");
  </style>
  <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
  <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>
  <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="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: Search engine optimisation" href="http://www.seomoves.com.au">Search engine optimisation</a><!-- 201110010090s jen@seo lowprofilelinks -->
</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 Ratings" href="http://webhostingrating.com">Web Hosting Ratings</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
   <a rel="follow" title="Sponsor: alaTest.com" href="http://alatest.com">alaTest.com</a><!-- 20110801000300 -->
</div>
</div>
</div>
</div>

<div class="eastbar">
<div style="margin: 9pt 9pt 9pt 9pt;">
  <div class="g-plusone" data-size="standard" data-count="false"></div>
</div>
</div>

<div class="main">

<h1>ImageMagick Version 7 Porting Guide</h1>

<p class="navigation-index">[<a href="#headers">Header Files</a> &bull; <a href="#components">Pixel Components</a> &bull; <a href="#alpha">Alpha</a> &bull; <a href="#grayscale">Grayscale</a> &bull; <a href="#depecate">Deprecated Features Removed</a> &bull; <a href="#summary">Version 7 Change Summary</a> ]</p>

<p>The design of ImageMagick is an evolutionary process, with the design and implementation efforts serving to influence and guide further progress in the other.  With ImageMagick version 7 we aim to improve the design based on lessons learned from the version 6 implementation.  ImageMagick was originally designed to display RGB images to an X Windows server.  Over time we extended support to RGBA images and then to the CMYK and CMYKA image format.  With ImageMagick version 7, we extend support to arbitrary colorspaces with an arbitrary number of pixel components.  Other design changes are in the works and we will document them here so be sure to revisit periodically.</p>

<p>To support variable pixel components in the MagickCore API, pixel handling has changed and now requires accessors to get or set the pixel components.  There are some modest changes to the MagickWand API.   Magick++ and PerlMagick should behave exactly as it does for ImageMagick version 6.</p>

<p>We intend to make ImageMagick version 7 available as an Alpha release by the end-of-year 2011.  Look for a Beta release sometime in 2012.  An official ImageMagick version 7 release will depend on how smoothly the Beta cycle progresses.  During the Beta cycle, version 6 developers can attempt to port their software to version 7.<p>

<p>During the ImageMagick version 7 development cycle and release, we will continue to support and enhance version 6 for a minimum of 10 years.</p>
<h2><a id="headers"></a>Header Files</h2>
<div class="doc-section">
<p>Prior versions of ImageMagick (4-6) references the ImageMagick header files as <kbd>magick/</kbd> and <kbd>wand/</kbd>.  ImageMagick 7 instead uses <kbd>MagickCore/</kbd> and <kbd>MagickWand/</kbd> respectively.  For example,</p>
<pre class="code">
#include &lt;MagickCore/MagickCore.h>
#include &lt;MagickWand/MagickWand.h>
</pre>
</div>

<h2><a id="components"></a>Pixel Components</h2>
<div class="doc-section">
<p>A pixel is comprised of one or more color values we call <em>components</em> (e.g. red pixel component).  However, when we discuss a pixel component across more than one pixel, we call these <em>channels</em> (i.e. the red pixel channel).</p>
<p>Prior versions of ImageMagick (4-6), supports 4 to 5 pixel components (RGBA or CMYKA).  The first 4 components are accessed with the PixelPacket data structure.   The structure includes 4 members of type Quantum (typically 16-bits) of red, green, blue, and opacity.  The black component or colormap indexes are supported by a separate method and structure, IndexPacket.  As an example, here is a code snippet from ImageMagick version 6 that negates image pixels:</p>

<pre class="code">
  for (y=0; y &lt; (ssize_t) image->rows; y++)
  {
    register IndexPacket
      *indexes;

    register PixelPacket
      *q;

    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
    if (q == (PixelPacket *) NULL)
      {
        status=MagickFalse;
        continue;
      }
    indexes=GetCacheViewAuthenticIndexQueue(image_view);
    for (x=0; x &lt; (ssize_t) image->columns; x++)
    {
      if ((channel & RedChannel) != 0)
        q->red=(Quantum) QuantumRange-q->red;
      if ((channel & GreenChannel) != 0)
        q->green=(Quantum) QuantumRange-q->green;
      if ((channel & BlueChannel) != 0)
        q->blue=(Quantum) QuantumRange-q->blue;
      if ((channel & OpacityChannel) != 0)
        q->opacity=(Quantum) QuantumRange-q->opacity;
      if (((channel & IndexChannel) != 0) &&
          (image->colorspace == CMYKColorspace))
        indexes[x]=(IndexPacket) QuantumRange-indexes[x];
      q++;
    }
    if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
      status=MagickFalse;
  }
</pre>

<p>ImageMagick version 7 supports any number of components from 1 to 100 (and beyond) and simplifies access with a single method that returns an array of pixel components of type Quantum.   Source code that compiles against prior versions of ImageMagick will require refactoring to work with ImageMagick version 7.  We illustrate with an example.  Let's naively refactor the version 6 code snippet from above so it works with the ImageMagick version 7 API:</p>

<pre class="code">
  for (y=0; y &lt; (ssize_t) image->rows; y++)
  {
    register Quantum
      *q;

    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
    if (q == (Quantum *) NULL)
      {
        status=MagickFalse;
        continue;
      }
    for (x=0; x &lt; (ssize_t) image->columns; x++)
    {
      if ((GetPixelRedTraits(image) & ActivePixelTrait) != 0)
        SetPixelRed(image,QuantumRange-GetPixelRed(image,q),q);
      if ((GetPixelGreenTraits(image) & ActivePixelTrait) != 0)
        SetPixelGreen(image,QuantumRange-GetPixelGreen(image,q),q);
      if ((GetPixelBlueTraits(image) & ActivePixelTrait) != 0)
        SetPixelBlue(image,QuantumRange-GetPixelBlue(image,q),q);
      if ((GetPixelBlackTraits(image) & BlackPixelTrait) != 0)
        SetPixelBlack(image,QuantumRange-GetPixelBlack(image,q),q);
      if ((GetPixelAlphaTraits(image) & ActivePixelTrait) != 0)
        SetPixelAlpha(image,QuantumRange-GetPixelAlpha(image,q),q);
      q+=GetPixelComponents(image);
    }
    if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
      status=MagickFalse;
  }
</pre>

<p>Let's do that again but take full advantage of the new variable pixel component support:</p>
<pre class="code">
  for (y=0; y &lt; (ssize_t) image->rows; y++)
  {
    register Quantum
      *q;

    q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,exception);
    if (q == (Quantum *) NULL)
      {
        status=MagickFalse;
        continue;
      }
    for (x=0; x &lt; (ssize_t) image->columns; x++)
      for (component=0; component &lt; GetPixelComponents(image); component++)
      {
        if ((GetPixelComponentTraits(image,component) & ActivePixelTrait) != 0)
          *q=(Quantum) QuantumRange-(*q);
        q++;
      }
    if (SyncCacheViewAuthenticPixels(image_view,exception) == MagickFalse)
      status=MagickFalse;
  }
</pre>

<p>Use GetPixelComponents() to advance to the next set of pixel components.</p>

<p>The colormap indexes and black pixel component (for the CMYK colorspace) are no longer stored in the index component, previously accessed with GetAuthenticIndexQueue() and GetCacheViewAuthenticIndexQueue(().  Instead they are now a pixel component and accessed with the convenience pixel macros GetPixelIndex(), SetPixelIndex(), GetPixelBlack(), and SetPixelBlack().</p>

<p>In addition to supporting any number of components, version 7 simplifies working with components and provides opportunity for compiler optimiziations that were previously not possible.  Our benchmarking shows version 7 has increased performance for virtually all image operations.</p>

<h4></a>Pixel Accessors</h4>
<p>Use accessors to get or set pixel components:</p>

<pre class="text">
  GetPixelAlpha()
  GetPixelBlack()
  GetPixelBlue()
  GetPixelCb()
  GetPixelComponents()
  GetPixelCr()
  GetPixelCyan()
  GetPixelGray()
  GetPixelGreen()
  GetPixelIndex()
  GetPixelInfoIntensity()
  GetPixelInfoLuminance()
  GetPixelMagenta()
  GetPixelRed()
  GetPixelPacket()
  GetPixelPacketIntensity()
  GetPixelY()
  GetPixelYellow()
  GetPixelIntensity()
  SetPixelAlpha()
  SetPixelBlack()
  SetPixelBlue()
  SetPixelCb()
  SetPixelComponents()
  SetPixelCr()
  SetPixelCyan()
  SetPixelGray()
  SetPixelGreen()
  SetPixelIndex()
  SetPixelInfo()
  SetPixelInfoBias()
  SetPixelInfoPacket()
  SetPixelMagenta()
  SetPixelRed()
  SetPixelPacket()
  SetPixelPixelInfo()
  SetPixelYellow()
  SetPixelY()
</pre>

<p>You can find these accessors defined in the header file, <kbd>MagickCore/pixel-accessor.h</kbd></p>

<h4></a>Pixel Traits</h4>
<p>Each pixel component includes one or more of these traits:</p>
<dl>
<dt>Undefined</dt>
<dd>no traits associated with this pixel component<dd>
<dt>Active</dt>
<dd>an image processing algorithm operates on this pixel component if this trait is enabled, conversely if this trait is not enabled, the pixel component is skipped (e.g. negate red pixel component but not blue or green)<dd>
<dt>Blend</dt>
<dd>blend this pixel component with the alpha mask if it's enabled<dd>
</dl>
<p>We provide these methods to set and get pixel traits:</p>
<pre class="text">
  GetPixelAlphaTraits()
  GetPixelBlackTraits()
  GetPixelBlueTraits()
  GetPixelCbTraits()
  GetPixelCrTraits()
  GetPixelCyanTraits()
  GetPixelGrayTraits()
  GetPixelGreenTraits()
  GetPixelIndexTraits()
  GetPixelMagentaTraits()
  GetPixelRedTraits()
  GetPixelComponentTraits()
  GetPixelYTraits()
  GetPixelYellowTraits()
  SetPixelAlphaTraits()
  SetPixelBlackTraits()
  SetPixelBlueTraits()
  SetPixelCbTraits()
  SetPixelComponentTraits()
  SetPixelCrTraits()
  SetPixelGrayTraits()
  SetPixelGreenTraits()
  SetPixelIndexTraits()
  SetPixelMagentaTraits()
  SetPixelRedTraits()
  SetPixelYellowTraits()
  SetPixelYTraits()
</pre>
<p>For convenience you can set the active trait for a set of pixel components with a channel mask and these methods:</p>
<pre class="text">
  PopPixelComponentMap()
  PushPixelComponentMap()
  SetPixelComponentMap()
</pre>

<p>Previously MagickCore methods had channel analogs, for example, NegateImage() and NegateImageChannels().  The channel analog methods are no longer necessary because the pixel component traits specify whether to act on a particular pixel component and whether to blend with the alpha mask.  For example, instead of</p>
<pre class="text">
  NegateImageChannel(image,channel);
</pre>
<p>we use:</p>
<pre class="text">
  PushPixelComponentMap(image,channel);
  NegateImage(image);
  PopPixelComponentMap(image);
</pre>

<h4></a>Pixel Metacontent</h4>
<p>In version 7, we introduce pixel metacontent.  Metacontent is content about content. So rather than being the content itself, it's something that describes or amplifies the content.  Here the content is a pixel.  The pixel metacontent is for your exclusive use and is accessed with these MagickCore API methods:</p>
<pre class="text">
  SetImageMetacontentExtent()
  GetImageMetacontentExtent()
  GetVirtualMetacontent()
  GetAuthenticMetacontent()
  GetCacheViewAuthenticMetacontent()
  GetCacheViewVirtualMetacontent()
</pre>
</div>

<h2><a id="alpha"></a>Alpha</h2>
<div class="doc-section">
<p>We support alpha now, previously opacity.  With alpha, a value of 0 means that the pixel does not have any coverage information and is transparent; i.e. there was no color contribution from any geometry because the geometry did not overlap this pixel. A value of QuantumRange means that the pixel is opaque because the geometry completely overlapped the pixel. As a consequence, in version 7, the PixelPacket structure member alpha has replaced the previous opacity member.</p>
</div>
<h2><a id="grayscale"></a>Grayscale</h2>
<div class="doc-section">
<p>Previously, grayscale images consumed 4 components: red, green, blue, and alpha.  With version 7, grayscale consumes only 1 component consuming far less resources as a result.  However, there may be unintended consequences.  With 1 component, all image processing algorithms write to this one component.  Drawing yellow text on a grayscale image will produce gray lettering.  To get the expected results, simply modify the colorspace to RGB (e.g. -colorspace rgb).</p>
</div>

<h2><a id="deprecate"></a>Deprecated Features Removed</h2>
<div class="doc-section">
<p>All deprecated features from ImageMagick version 6 are removed in version 7.  These include the <kbd>Magick-config</kbd> and <kbd>Wand-config</kbd> configuration utilities.  Instead use:</p>

<pre class="code">
  MagickCore-config
  MagickWand-config
</pre>

<p>In addition, all deprecated <a href="http://magick.imagemagick.org/api/deprecate.html">MagickCore</a> and <a href="http://magick.imagemagick.org/api/magick-deprecate.html">MagickWand</a> methods are no longer available in version 7.</p>
</div>
<h2><a id="summary"></a>Version 7 Change Summary</h2>
<div class="doc-section">
<p>Changes from ImageMagick version 6 to version 7 are summarized here:</p>
<h5>Pixels</h5>
<dl>
<li>Pixels are no longer addressed with PixelPacket structure members (e.g. red, green, blue, opacity) but as an array of components (e.g. pixel[PixelRedComponent]).</li>
<li>Use convenience macros to access pixel components (e.g. GetPixelRed(), SetPixelRed()).</li>
<li>The black component for the CMYK colorspace is no longer stored in the index component, previously accessed with GetAuthenticIndexQueue() and GetCacheViewAuthenticIndexQueue(().  Instead it is now a pixel component and accessed with the convenience pixel macros GetPixelBlack() and SetPixelBlack().</li>
<li>The index component for colormapped images are no longer stored in the index component, previously accessed with GetAuthenticIndexQueue() and GetCacheViewAuthenticIndexQueue(().  Instead it is now a pixel component and accessed with the convenience pixel macros GetPixelIndex() and SetPixelIndex().</li>
<li>Use GetPixelComponents() to advance to the next set of pixel components.</li>
<li>Use the <em>metacontent</em> component  to associate metacontent with each pixel.</li>
</dl>
<h5>Alpha</h5>
<dl>
<li>We support alpha rather than opacity (0 transparent; QuantumRange opaque).</li>
<li>Use GetPixelAlpha() or SetPixelAlpha() to get or set the alpha pixel component value.</li>
</dl>
<h5>Grayscale</h5>
<dl>
<li>Grayscale images consume one pixel component in ImageMagick version 7.  To process RGB, set the colorspace to RGB (e.g. -colorspace rgb).</li>
</dl>
<h5>Deprecated Methods</h5>
<dl>
<li>All ImageMagick version 6 MagickCore and MagickWand deprecated methods are removed and no longer available in ImageMagick version 7.</li>
<li>All MagickCore channel method analogs are removed (e.g. NegateImageChannels()).  For version 7, use pixel traits instead.</li>
</dl>
</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>
