<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U="/>
  <title>ImageMagick: 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="Application-name" content="ImageMagick"/>
  <meta name="Description" content="ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (about 100) including GIF, JPEG, JPEG-2000, PNG, PDF, PhotoCD, TIFF, and DPX. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.  ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you can freely use, copy, modify, and distribute. Its license is compatible with the GPL. It runs on all major operating systems.  The functionality of ImageMagick is typically utilized from the command line or you can use the features from programs written in your favorite programming language. Choose from these interfaces: MagickCore (C), MagickWand (C), ChMagick (Ch), Magick++ (C++), JMagick (Java), L-Magick (Lisp), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK). With a language interface, use ImageMagick to modify or create images automagically and dynamically."/>
  <meta name="Application-url" content="http://www.imagemagick.org"/>
  <meta name="Generator" content="PHP"/>
  <meta name="Keywords" content="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="Rating" content="GENERAL"/>
  <meta name="Robots" content="INDEX, FOLLOW"/>
  <meta name="Generator" content="ImageMagick Studio LLC"/>
  <meta name="Author" content="ImageMagick Studio LLC"/>
  <meta name="Revisit-after" content="2 DAYS"/>
  <meta name="Resource-type" content="document"/>
  <meta name="Copyright" content="Copyright (c) 1999-2010 ImageMagick Studio LLC"/>
  <meta name="Distribution" content="Global"/>
  <link rel="icon" href="../../images/wand.png"  sizes="32x32"/>
  <link rel="shortcut icon" href="../../images/wand.ico"  type="images/x-icon"/>
  <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
  <style type="text/css" media="all">
    @import url("../../www/magick.css");
  </style>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<a href="../../index.html">
  <img src="../../images/script.png" alt="[ImageMagick]"
  style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>
<a href="http://www.networkredux.com">
  <img src="../../images/networkredux.png" alt="[sponsor]"
  style="margin: 45px auto; border: 0px; float: left;" /></a>
<a href="http://www.imagemagick.org/discourse-server/">
  <img src="../../images/logo.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
<a href="../../index.html">
  <img src="../../images/sprite.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
</div>

<div class="westbar">

<div class="menu">
  <a title="About ImageMagick" href="../../index.html">About ImageMagick</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Binary Releases" href="../../www/binary-releases.html">Binary Releases</a>
</div>
<div class="sub">
    <a title="Binary Release: Unix" href="../../www/binary-releases.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Binary Release: MacOS X" href="../../www/binary-releases.html#macosx">Mac OS X</a>
</div>
<div class="sub">
    <a title="Binary Release: Windows" href="../../www/binary-releases.html#windows">Windows</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Command-line Tools" href="../../www/command-line-tools.html">Command-line Tools</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Processing" href="../../www/command-line-processing.html">Processing</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Options" href="../../www/command-line-options.html">Options</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
</div>
<div class="menu">
  <a title="Program Interfaces" href="../../www/api.html">Program Interfaces</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickWand" href="../../www/magick-wand.html">MagickWand</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickCore" href="../../www/magick-core.html">MagickCore</a>
</div>
<div class="sub">
    <a title="Program Interface: PerlMagick" href="../../www/perl-magick.html">PerlMagick</a>
</div>
<div class="sub">
    <a title="Program Interface: Magick++" href="../../Magick++/">Magick++</a>
</div>
<div class="sep"></div>
<div  class="menu">
   <a title="Install from Source" href="../../www/install-source.html">Install from Source</a>
</div>
<div class="sub">
    <a title="Install from Source: Unix" href="../../www/install-source.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Install from Source: Windows" href="../../www/install-source.html#windows">Windows</a>
 </div>
<div class="menu">
  <a title="Resources" href="../../www/resources.html">Resources</a>
</div>
<div class="menu">
  <a title="Architecture" href="../../www/architecture.html">Architecture</a>
</div>
<div class="menu">
  <a title="Download" href="../../www/download.html">Download</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Search" href="../http://www.imagemagick.org/script/search.php">Search</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Site Map"href="../../www/sitemap.html">Site Map</a>
</div>
<div  class="sub">
    <a title="Site Map: Links"href="../../www/links.html">Links</a>
</div>
<div class="sep"></div>
<div  class="menu">
  <a title="Sponsors" href="../../www/sponsors.html">Sponsors:</a>

<div class="sponsbox">
<div  class="sponsor">
  <a title="Sponsor: 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: Online-Magazin" href="http://www.unkostenbeitrag.de/">Online-Magazin</a><!-- 20101101000200 -->
</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>
