<!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=" />
  <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>
  <link rel="shortcut icon" href="../../images/wand.ico"  type="images/vnd.microsoft.icon"/>
  <title>ImageMagick: MagickCore, C API for ImageMagick: Enhance an Image</title>
  <meta http-equiv="Content-Language" content="en-US"/>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
  <meta name="Generator" content="PHP"/>
  <meta name="Keywords" content="magickcore, c, api, for, imagemagick:, enhance, an, image, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
  <meta name="Description" content="ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (about 100) including GIF, JPEG, JPEG-2000, PNG, PDF, PhotoCD, TIFF, and DPX. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.  ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you can freely use, copy, modify, and distribute. Its license is compatible with the GPL. It runs on all major operating systems.  The functionality of ImageMagick is typically utilized from the command line or you can use the features from programs written in your favorite programming language. Choose from these interfaces: MagickCore (C), MagickWand (C), ChMagick (Ch), Magick++ (C++), JMagick (Java), L-Magick (Lisp), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK). With a language interface, use ImageMagick to modify or create images automagically and dynamically."/>
  <meta name="Rating" content="GENERAL"/>
  <meta name="Robots" content="INDEX, FOLLOW"/>
  <meta name="Generator" content="ImageMagick Studio LLC"/>
  <meta name="Author" content="ImageMagick Studio LLC"/>
  <meta name="Revisit-after" content="2 DAYS"/>
  <meta name="Resource-type" content="document"/>
  <meta name="Copyright" content="Copyright (c) 1999-2010 ImageMagick Studio LLC"/>
  <meta name="Distribution" content="Global"/>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<a href="../../index.html">
  <img src="../../images/script.png" alt="[ImageMagick]"
  style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>
<a href="http://www.networkredux.com">
  <img src="../../images/networkredux.png" alt="[sponsor]"
  style="margin: 45px auto; border: 0px; float: left;" /></a>
<a href="http://www.imagemagick.org/discourse-server/">
  <img src="../../images/logo.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
<a href="../../index.html">
  <img src="../../images/sprite.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
</div>

<div class="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: 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: Deko.net" href="http://www.deko.net">Deko.net</a><!-- 201101010600 Peterssen-->
</div>
<div  class="sponsor">
  <a title="Sponsor: Druckerei" href="http://www.print24.de/">Druckerei</a><!-- 201009010720 -->
</div>
<div  class="sponsor">
   <a title="Sponsor: Druckerei Online" href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012011200 allesdruck.de-->
</div>
<div  class="sponsor">
   <a title="Sponsor: Free Catalogs" href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 20120801000600 -->
</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="#AutoGammaImage">AutoGammaImage</a> &bull; <a href="#AutoLevelImage">AutoLevelImage</a> &bull; <a href="#Use BrightnessContrastImage">Use BrightnessContrastImage</a> &bull; <a href="#ColorDecisionListImage">ColorDecisionListImage</a> &bull; <a href="#ClutImage">ClutImage</a> &bull; <a href="#ContrastImage">ContrastImage</a> &bull; <a href="#The ContrastStretchImage">The ContrastStretchImage</a> &bull; <a href="#EnhanceImage">EnhanceImage</a> &bull; <a href="#EqualizeImage">EqualizeImage</a> &bull; <a href="#GammaImage">GammaImage</a> &bull; <a href="#HaldClutImage">HaldClutImage</a> &bull; <a href="#LevelImage">LevelImage</a> &bull; <a href="#LevelizeImage">LevelizeImage</a> &bull; <a href="#LevelizeImageChannel">LevelizeImageChannel</a> &bull; <a href="#LevelImageColor">LevelImageColor</a> &bull; <a href="#The LinearStretchImage">The LinearStretchImage</a> &bull; <a href="#ModulateImage">ModulateImage</a> &bull; <a href="#NegateImage">NegateImage</a> &bull; <a href="#The NormalizeImage">The NormalizeImage</a> &bull; <a href="#SigmoidalContrastImage">SigmoidalContrastImage</a>]</p>

<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="AutoGammaImage">AutoGammaImage</a></h2>
<div class="doc-section">

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

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

<pre class="code">
  MagickBooleanType AutoGammaImage(Image *image)
  MagickBooleanType AutoGammaImageChannel(Image *image,
    const ChannelType channel)
</pre>

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

<h5>image</h5>
<ol><p>The image to auto-level</p></ol>

<h5>channel</h5>
<ol><p>The channels to auto-level.  If the special 'SyncChannels' flag is set all given channels is adjusted in the same way using the mean average of those channels.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="AutoLevelImage">AutoLevelImage</a></h2>
<div class="doc-section">

<p>AutoLevelImage() 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 LevelImage method is:</p>

<pre class="code">
  MagickBooleanType AutoLevelImage(Image *image)
  MagickBooleanType AutoLevelImageChannel(Image *image,
    const ChannelType channel)
</pre>

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

<h5>image</h5>
<ol><p>The image to auto-level</p></ol>

<h5>channel</h5>
<ol><p>The channels to auto-level.  If the special 'SyncChannels' flag is set the min/max/mean value of all given channels is used for all given channels, to all channels in the same way.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="Use BrightnessContrastImage">Use BrightnessContrastImage</a></h2>
<div class="doc-section">

<p>Use BrightnessContrastImage() 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 BrightnessContrastImage method is:</p>

<pre class="code">
  MagickBooleanType BrightnessContrastImage(Image *image,
    const double brightness,const double contrast)
  MagickBooleanType BrightnessContrastImageChannel(Image *image,
    const ChannelType channel,const double brightness,
    const double contrast)
</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.</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/MagickCore/enhance
_8c.html" target="source" name="ColorDecisionListImage">ColorDecisionListImage</a></h2>
<div class="doc-section">

<p>ColorDecisionListImage() accepts a lightweight Color Correction Collection (CCC) file which solely contains one or more color corrections and applies the 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 slop, offset, and power for each of the RGB channels as well as the saturation.</p></ol>

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

<pre class="code">
  MagickBooleanType ColorDecisionListImage(Image *image,
    const char *color_correction_collection)
</pre>

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

<h5>image</h5>
<ol><p>the image.</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/MagickCore/enhance
_8c.html" target="source" name="ClutImage">ClutImage</a></h2>
<div class="doc-section">

<p>ClutImage() replaces each color value in the given image, by using it as an index to lookup a replacement color value in a Color Look UP Table in the form of an image.  The values are extracted along a diagonal of the CLUT image so either a horizontal or vertial gradient image can be used.</p></ol>

<p>Typically this is used to either re-color a gray-scale image according to a color gradient in the CLUT image, or to perform a freeform histogram (level) adjustment according to the (typically gray-scale) gradient in the CLUT image.</p></ol>

<p>When the 'channel' mask includes the matte/alpha transparency channel but one image has no such channel it is assumed that that image is a simple gray-scale image that will effect the alpha channel values, either for gray-scale coloring (with transparent or semi-transparent colors), or a histogram adjustment of existing alpha channel values.   If both images have matte channels, direct and normal indexing is applied, which is rarely used.</p></ol>

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

<pre class="code">
  MagickBooleanType ClutImage(Image *image,Image *clut_image)
  MagickBooleanType ClutImageChannel(Image *image,
    const ChannelType channel,Image *clut_image)
</pre>

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

<h5>image</h5>
<ol><p>the image, which is replaced by indexed CLUT values</p></ol>

<h5>clut_image</h5>
<ol><p>the color lookup table image for replacement color values.</p></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="ContrastImage">ContrastImage</a></h2>
<div class="doc-section">

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

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

<pre class="code">
  MagickBooleanType ContrastImage(Image *image,
    const MagickBooleanType sharpen)
</pre>

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

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

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="The ContrastStretchImage">The ContrastStretchImage</a></h2>
<div class="doc-section">

<p>The ContrastStretchImage() is a simple image enhancement technique that attempts to improve the contrast in an image by `stretching' the range of intensity values it contains to span a desired range of values. It differs from the more sophisticated histogram equalization in that it can only apply   a linear scaling function to the image pixel values.  As a result the `enhancement' is less harsh.</p></ol>

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

<pre class="code">
  MagickBooleanType ContrastStretchImage(Image *image,
    const char *levels)
  MagickBooleanType ContrastStretchImageChannel(Image *image,
    const size_t channel,const double black_point,
    const double white_point)
</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.</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>levels</h5>
<ol><p>Specify the levels where the black and white points have the range of 0 to number-of-pixels (e.g. 1, 10x90, etc.).</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="EnhanceImage">EnhanceImage</a></h2>
<div class="doc-section">

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

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

<pre class="code">
  Image *EnhanceImage(const Image *image,ExceptionInfo *exception)
</pre>

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

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

<h5>exception</h5>
<ol><p>return any errors or warnings in this structure.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="EqualizeImage">EqualizeImage</a></h2>
<div class="doc-section">

<p>EqualizeImage() applies a histogram equalization to the image.</p></ol>

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

<pre class="code">
  MagickBooleanType EqualizeImage(Image *image)
  MagickBooleanType EqualizeImageChannel(Image *image,
    const ChannelType channel)
</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.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="GammaImage">GammaImage</a></h2>
<div class="doc-section">

<p>GammaImage() gamma-corrects a particular image channel.  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 GammaImage method is:</p>

<pre class="code">
  MagickBooleanType GammaImage(Image *image,const double gamma)
  MagickBooleanType GammaImageChannel(Image *image,
    const ChannelType channel,const double gamma)
</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.</p></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="HaldClutImage">HaldClutImage</a></h2>
<div class="doc-section">

<p>HaldClutImage() applies a Hald color lookup table to the image.  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 HaldClutImage method is:</p>

<pre class="code">
  MagickBooleanType HaldClutImage(Image *image,Image *hald_image)
  MagickBooleanType HaldClutImageChannel(Image *image,
    const ChannelType channel,Image *hald_image)
</pre>

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

<h5>image</h5>
<ol><p>the image, which is replaced by indexed CLUT values</p></ol>

<h5>hald_image</h5>
<ol><p>the color lookup table image for replacement color values.</p></ol>

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

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="LevelImage">LevelImage</a></h2>
<div class="doc-section">

<p>LevelImage() adjusts the levels of a particular image channel by scaling the colors falling between specified white and black points to the full available quantum range.</p></ol>

<p>The parameters provided represent the black, and white points.  The black point specifies the darkest color in the image. Colors darker than the black point are set to zero.  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>If a '!' flag is given, map black and white colors to the given levels rather than mapping those levels to black and white.  See LevelizeImageChannel() and LevelizeImageChannel(), below.</p></ol>

<p>Gamma specifies a gamma correction to apply to the image.</p></ol>

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

<pre class="code">
  MagickBooleanType LevelImage(Image *image,const char *levels)
</pre>

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

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

<h5>levels</h5>
<ol><p>Specify the levels where the black and white points have the range of 0-QuantumRange, and gamma has the range 0-10 (e.g. 10x90+2). A '!' flag inverts the re-mapping.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="LevelizeImage">LevelizeImage</a></h2>
<div class="doc-section">

<p>LevelizeImage() applies the normal level operation to the image, spreading out the values between the black and white points over the entire range of values.  Gamma correction is also applied after the values has been mapped.</p></ol>

<p>It is typically used to improve image contrast, or to provide a controlled linear threshold for the image. If the black and white points are set to the minimum and maximum values found in the image, the image can be normalized.  or by swapping black and white values, negate the image.</p></ol>

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

<pre class="code">
  MagickBooleanType LevelizeImage(Image *image,const double black_point,
    const double white_point,const double gamma)
  MagickBooleanType LevelizeImageChannel(Image *image,
    const ChannelType channel,const double black_point,
    const double white_point,const double gamma)
</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.</p></ol>

<h5>black_point</h5>
<ol><p>The level which is to be mapped to zero (black)</p></ol>

<h5>white_point</h5>
<ol><p>The level which is to be mapped to QuantiumRange (white)</p></ol>

<h5>gamma</h5>
<ol><p>adjust gamma by this factor before mapping values. use 1.0 for purely linear stretching of image color values</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="LevelizeImageChannel">LevelizeImageChannel</a></h2>
<div class="doc-section">

<p>LevelizeImageChannel() applies the reversed LevelImage() operation to just the specific channels specified.  It compresses the full range of color values, so that they lie between the given black and white points. Gamma is applied before the values are mapped.</p></ol>

<p>LevelizeImageChannel() can be called with by using a +level command line API option, or using a '!' on a -level or LevelImage() geometry string.</p></ol>

<p>It can be used for example de-contrast a greyscale image to the exact levels specified.  Or by using specific levels for each channel of an image you can convert a gray-scale image to any linear color gradient, according to those levels.</p></ol>

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

<pre class="code">
  MagickBooleanType LevelizeImageChannel(Image *image,
    const ChannelType channel,const char *levels)
</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.</p></ol>

<h5>black_point</h5>
<ol><p>The level to map zero (black) to.</p></ol>

<h5>white_point</h5>
<ol><p>The level to map QuantiumRange (white) to.</p></ol>

<h5>gamma</h5>
<ol><p>adjust gamma by this factor before mapping values.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="LevelImageColor">LevelImageColor</a></h2>
<div class="doc-section">

<p>LevelImageColor() maps the given color to "black" and "white" values, linearly spreading out the colors, and level values on a channel by channel bases, as per LevelImage().  The given colors allows you to specify different level ranges for each of the color channels seperatally.</p></ol>

<p>If the boolean 'invert' is set true the image values will modifyed in the reverse direction. That is any existing "black" and "white" colors in the image will become the color values given, with all other values compressed appropriatally.  This effectivally maps a greyscale gradient into the given color gradient.</p></ol>

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

<pre class="code">
      MagickBooleanType LevelColorsImage(Image *image,
  const MagickPixelPacket *black_color,
  const MagickPixelPacket *white_color,const MagickBooleanType invert)
      MagickBooleanType LevelColorsImageChannel(Image *image,
  const ChannelType channel,const MagickPixelPacket *black_color,
  const MagickPixelPacket *white_color,const MagickBooleanType invert)
</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.</p></ol>

<h5>black_color</h5>
<ol><p>The color to map black to/from</p></ol>

<h5>white_point</h5>
<ol><p>The color to map white to/from</p></ol>

<h5>invert</h5>
<ol><p>if true map the colors (levelize), rather than from (level)</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="The LinearStretchImage">The LinearStretchImage</a></h2>
<div class="doc-section">

<p>The LinearStretchImage() discards any pixels below the black point and above the white point and levels the remaining pixels.</p></ol>

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

<pre class="code">
  MagickBooleanType LinearStretchImage(Image *image,
    const double black_point,const double white_point)
</pre>

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

<h5>image</h5>
<ol><p>the image.</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/MagickCore/enhance
_8c.html" target="source" name="ModulateImage">ModulateImage</a></h2>
<div class="doc-section">

<p>ModulateImage() lets you control the brightness, saturation, and hue of an image.  Modulate represents the brightness, saturation, and hue as one parameter (e.g. 90,150,100).  If the image colorspace is HSL, the modulation is lightness, saturation, and hue.  And if the colorspace is HWB, use blackness, whiteness, and hue.</p></ol>

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

<pre class="code">
  MagickBooleanType ModulateImage(Image *image,const char *modulate)
</pre>

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

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

<h5>modulate</h5>
<ol><p>Define the percent change in brightness, saturation, and hue.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="NegateImage">NegateImage</a></h2>
<div class="doc-section">

<p>NegateImage() negates the colors in the reference image.  The grayscale option means that only grayscale values within the image are negated.</p></ol>

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

<pre class="code">
  MagickBooleanType NegateImage(Image *image,
    const MagickBooleanType grayscale)
  MagickBooleanType NegateImageChannel(Image *image,
    const ChannelType channel,const MagickBooleanType grayscale)
</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.</p></ol>

<h5>grayscale</h5>
<ol><p>If MagickTrue, only negate grayscale pixels within the image.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="The NormalizeImage">The NormalizeImage</a></h2>
<div class="doc-section">

<p>The NormalizeImage() method enhances the contrast of a color image by mapping the darkest 2 percent of all pixel to black and the brightest 1 percent to white.</p></ol>

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

<pre class="code">
  MagickBooleanType NormalizeImage(Image *image)
  MagickBooleanType NormalizeImageChannel(Image *image,
    const ChannelType channel)
</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.</p></ol>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance
_8c.html" target="source" name="SigmoidalContrastImage">SigmoidalContrastImage</a></h2>
<div class="doc-section">

<p>SigmoidalContrastImage() 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 SigmoidalContrastImage method is:</p>

<pre class="code">
  MagickBooleanType SigmoidalContrastImage(Image *image,
    const MagickBooleanType sharpen,const char *levels)
  MagickBooleanType SigmoidalContrastImageChannel(Image *image,
    const ChannelType channel,const MagickBooleanType sharpen,
    const double contrast,const double midpoint)
</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.</p></ol>

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

<h5>contrast</h5>
<ol><p>control the "shoulder" of the contast curve.</p></ol>

<h5>midpoint</h5>
<ol><p>control the "toe" of the contast curve.</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>
