<!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">
<head>
  <meta http-equiv="Content-Type" value="application/xhtml+xml" />
  <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="screen,projection"><!--
    @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: Set Text Attributes</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:, set, text, attributes, 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="eastbar">

<div class="menu">
  <a href="../../index.html">About ImageMagick</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../../www/command-line-tools.html">Command-line Tools</a>
</div>
<div class="sub">
    <a href="../../www/command-line-processing.html">Processing</a>
</div>
<div class="sub">
    <a href="../../www/command-line-options.html">Options</a>
</div>
<div class="sub">
    <a href="http://www.imagemagick.org/Usage/">Usage</a>
</div>
<div class="menu">
  <a href="../../www/api.html">Program Interfaces</a>
</div>
<div class="sub">
    <a href="../../www/magick-wand.html">MagickWand</a>
</div>
<div class="sub">
    <a href="../../www/magick-core.html">MagickCore</a>
</div>
<div class="sub">
    <a href="../../www/perl-magick.html">PerlMagick</a>
</div>
<div class="sub">
    <a href="../../Magick++/">Magick++</a>
</div>
<div class="menu">
  <a href="../../www/architecture.html">Architecture</a>
</div>
<div class="sep"></div>
<div  class="menu">
   <a href="../../www/install-source.html">Install from Source</a>
</div>
<div class="sub">
    <a href="../../www/install-source.html#unix">Unix</a>
</div>
<div class="sub">
    <a href="../../www/install-source.html#windows">Windows</a>
 </div>
<div class="menu">
  <a href="../../www/binary-releases.html">Binary Releases</a>
</div>
<div class="sub">
    <a href="../../www/binary-releases.html#unix">Unix</a>
</div>
<div class="sub">
    <a href="../../www/binary-releases.html#macosx">Mac OS X</a>
</div>
<div class="sub">
    <a href="../../www/binary-releases.html#windows">Windows</a>
</div>
<div class="menu">
  <a href="../../www/resources.html">Resources</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../../www/download.html">Download</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../http://www.imagemagick.org/script/search.php">Search</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a href="../../www/sitemap.html">Site Map</a>
</div>
<div  class="sub">
    <a href="../../www/links.html">Links</a>
</div>
<div class="sep"></div>
<div  class="menu">
  <a href="../../www/sponsors.html">Sponsors:</a>

<div class="sponsbox">
<div  class="sponsor">
   <a href="http://www.hygi.de">Reinigungsmittel</a><!-- 201002000400+ -->
</div>
<div  class="sponsor">
  <a href="http://www.tomsgutscheine.de">Tom's Gutscheine</a><!-- 201005010360 invendio.de-->
</div>
<div  class="sponsor">
  <a href="http://www.online-kredit-index.de">Kredit</a><!-- 201006010120 Buchhorn -->
</div>
<div  class="sponsor">
  <a href="http://www.blumenversender.com">Blumenversand</a><!-- 201005010120 -->
</div>
<div  class="sponsor">
  <a href="http://www.print24.de/">Druckerei</a><!-- 201009010720 -->
</div>
<div  class="sponsor">
   <a href="http://www.goyax.de">Börse</a><!-- 201004010240 Gewiese digital-finance.de -->
</div>
<div  class="sponsor">
   <a href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012011200 allesdruck.de-->
</div>
<div  class="sponsor">
  <a href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 201002010000 -->
</div>
</div>
</div>


</div>

<div class="main">

<p class="navigation-index">[<a href="#GetImageChannelDepth">GetImageChannelDepth</a> &bull; <a href="#GetImageQuantumDepth">GetImageQuantumDepth</a> &bull; <a href="#GetImageType">GetImageType</a> &bull; <a href="#IsGrayImage">IsGrayImage</a> &bull; <a href="#IsMonochromeImage">IsMonochromeImage</a> &bull; <a href="#IsOpaqueImage">IsOpaqueImage</a> &bull; <a href="#SetImageChannelDepth">SetImageChannelDepth</a>]</p>

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

<p>GetImageChannelDepth() returns the depth of a particular image channel.</p></ol>

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

<pre class="code">
  unsigned long GetImageDepth(const Image *image,ExceptionInfo *exception)
  unsigned long GetImageChannelDepth(const Image *image,
    const ChannelType channel,ExceptionInfo *exception)
</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>exception</h5>
<ol><p>return any errors or warnings in this structure.</p></ol>

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

<p>GetImageQuantumDepth() returns the depth of the image rounded to a legal quantum depth: 8, 16, or 32.</p></ol>

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

<pre class="code">
  unsigned long GetImageQuantumDepth(const Image *image,
    const MagickBooleanType constrain)
</pre>

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

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

<h5>constrain</h5>
<ol><p>A value other than MagickFalse, constrains the depth to a maximum of MAGICKCORE_QUANTUM_DEPTH.</p></ol>

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

<p>GetImageType() returns the potential type of image:</p></ol>

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

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

<pre class="text">
      (void) SetImageType(image,GetImageType(image));
</pre>

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

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

<p>IsGrayImage() returns MagickTrue if all the pixels in the image have the same red, green, and blue intensities.</p></ol>

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

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

<p>IsMonochromeImage() returns MagickTrue if all the pixels in the image have the same red, green, and blue intensities and the intensity is either 0 or QuantumRange.</p></ol>

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

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

<p>IsOpaqueImage() returns MagickTrue if none of the pixels in the image have an opacity value other than opaque (0).</p></ol>

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

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

<p>SetImageChannelDepth() sets the depth of the image.</p></ol>

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

<pre class="code">
  MagickBooleanType SetImageDepth(Image *image,const unsigned long depth)
  MagickBooleanType SetImageChannelDepth(Image *image,
    const ChannelType channel,const unsigned long depth)
</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>depth</h5>
<ol><p>the image depth.</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://studio.webbyland.com/ImageMagick/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>
</body>
</html>
