<!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 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: Annotate 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:, annotate, 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-2009 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.buerodruck.de/stempel-service/index.html">Stempel bestellen</a><!-- 200910000035+ -->
</div>
<div  class="sponsor">
   <a href="http://www.goyax.de">Börse</a><!-- 201001000240 Gewiese digital-finance.de -->
</div>
<div  class="sponsor">
   <a href="http://www.allesdruck.de">Druckerei Online</a><!-- 201012001200 allesdruck.de-->
</div>
<div  class="sponsor">
  <a href="http://www.blumenversender.com">Blumenversand</a><!-- 200911010120 -->
</div>
<div  class="sponsor">
  <a href="http://www.print24.de/">Druckerei</a><!-- 200911010480 -->
</div>
<div  class="sponsor">
  <a href="http://www.who-sells-it.com/">Free Catalogs</a><!-- 201002010000 -->
</div>
<div  class="sponsor">
  <a href="http://www.online-kredit-index.de">Kredit</a><!-- 201002010120 Buchhorn -->
</div>
</div>
</div>


</div>

<div class="main">

<p class="navigation-index">[<a href="#AnnotateImage">AnnotateImage</a> &bull; <a href="#FormatMagickCaption">FormatMagickCaption</a> &bull; <a href="#GetMultilineTypeMetrics">GetMultilineTypeMetrics</a> &bull; <a href="#GetTypeMetrics">GetTypeMetrics</a>]</p>

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

<p>AnnotateImage() annotates an image with text.  Optionally you can include any of the following bits of information about the image by embedding the appropriate special characters:</p>

<pre class="text">
      b   file size in bytes.
      c   comment.
      d   directory in which the image resides.
      e   extension of the image file.
      f   original filename of the image.
      h   height of image.
      i   filename of the image.
      k   number of unique colors.
      l   image label.
      m   image file format.
      n   number of images in a image sequence.
      o   output image filename.
      p   page number of the image.
      q   image depth (8 or 16).
      q   image depth (8 or 16).
      s   image scene number.
      t   image filename without any extension.
      u   a unique temporary filename.
      w   image width.
      x   x resolution of the image.
      y   y resolution of the image.
</pre>

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

<pre class="code">
  MagickBooleanType AnnotateImage(Image *image,DrawInfo *draw_info)
</pre>

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

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

<h5>draw_info</h5>
<ol><p>the draw info.</p></ol>

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

<p>FormatMagickCaption() formats a caption so that it fits within the image width.  It returns the number of lines in the formatted caption.</p></ol>

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

<pre class="code">
  long FormatMagickCaption(Image *image,DrawInfo *draw_info,
    TypeMetric *metrics,char **caption)
</pre>

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

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

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

<h5>draw_info</h5>
<ol><p>the draw info.</p></ol>

<h5>metrics</h5>
<ol><p>Return the font metrics in this structure.</p></ol>

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

<p>GetMultilineTypeMetrics() returns the following information for the specified font and text:</p>

<pre class="text">
      character width
      character height
      ascender
      descender
      text width
      text height
      maximum horizontal advance
      bounds: x1
      bounds: y1
      bounds: x2
      bounds: y2
      origin: x
      origin: y
      underline position
      underline thickness
</pre>

<p>This method is like GetTypeMetrics() but it returns the maximum text width and height for multiple lines of text.</p></ol>

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

<pre class="code">
  MagickBooleanType GetMultilineTypeMetrics(Image *image,
    const DrawInfo *draw_info,TypeMetric *metrics)
</pre>

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

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

<h5>draw_info</h5>
<ol><p>the draw info.</p></ol>

<h5>metrics</h5>
<ol><p>Return the font metrics in this structure.</p></ol>

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

<p>GetTypeMetrics() returns the following information for the specified font and text:</p>

<pre class="text">
      character width
      character height
      ascender
      descender
      text width
      text height
      maximum horizontal advance
      bounds: x1
      bounds: y1
      bounds: x2
      bounds: y2
      origin: x
      origin: y
      underline position
      underline thickness
</pre>

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

<pre class="code">
  MagickBooleanType GetTypeMetrics(Image *image,const DrawInfo *draw_info,
    TypeMetric *metrics)
</pre>

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

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

<h5>draw_info</h5>
<ol><p>the draw info.</p></ol>

<h5>metrics</h5>
<ol><p>Return the font metrics in this structure.</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="../../www/mailing-list.html">Mailing Lists</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-2009 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>
