<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>ImageMagick: MagickWand, C API for ImageMagick: Command-line Interface</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, compose, or convert bitmap images. It can read and write images in a variety of formats (over 200) including PNG, JPEG, JPEG-2000, GIF, WebP, Postscript, PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.">
  <meta name="application-url" content="http://www.imagemagick.org">
  <meta name="generator" content="PHP">
  <meta name="keywords" content="magickwc, api, for, imagemagick:, command-line, interface, ImageMagick, PerlMagick, image processing, image, photo, software, Magick++, OpenMP, convert">
  <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-2015 ImageMagick Studio LLC">
  <meta name="distribution" content="Global">
  <meta name="magick-serial" content="P131-S030410-R485315270133-P82224-A6668-G1245-1">
  <link rel="icon" href="../images/wand.png">
  <link rel="shortcut icon" href="../images/wand.ico" type="images/x-icon">
  <link rel="stylesheet" href="../css/bootstrap.min.css">
  <link rel="stylesheet" href="../css/magick.css">
</head>

<body>
<div class="main">
<div class="magick-masthead">
  <div class="container">
    <script type="text/javascript">
    <!--
      google_ad_client = "pub-3129977114552745";
      google_ad_slot = "5439289906";
      google_ad_width = 728;
      google_ad_height = 90;
    //-->
    </script>
    <center><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script></center>
    <nav class="magick-nav">
      <a class="magick-nav-item " href="../index.html">Home</a>
      <a class="magick-nav-item " href="../binary-releases.html">Download</a>
      <a class="magick-nav-item " href="../command-line-tools.html">Tools</a>
      <a class="magick-nav-item " href="../command-line-options.html">Options</a>
      <a class="magick-nav-item " href="../resources.html">Resources</a>
      <a class="magick-nav-item " href="api.html">Develop</a>
      <a class="magick-nav-item " href="http://nextgen.imagemagick.org/script/search.php">Search</a>
      <a class="magick-nav-item pull-right" href="http://www.imagemagick.org/discourse-server/">Community</a>
    </nav>
  </div>
</div>
<div class="container">
<div class="magick-header">
<p class="text-center"><a href="mogrify.html#MagickCommandGenesis">MagickCommandGenesis</a></p>

<h2><a href="http://nextgen.imagemagick.org/api/MagickWand/mogrify_8c.html" id="MagickCommandGenesis">MagickCommandGenesis</a></h2>

<p>MagickCommandGenesis() applies image processing options to an image as prescribed by command line options.</p>

<p>It wiil look for special options like "-debug", "-bench", and "-distribute-cache" that needs to be applied even before the main processing begins, and may completely overrule normal command processing. Such 'Genesis' Options can only be given on the CLI, (not in a script) and are typically ignored (as they have been handled) if seen later.</p>

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

<pre class="text">
MagickBooleanType MagickCommandGenesis(ImageInfo *image_info,
  MagickCommand command,int argc,char **argv,char **metadata,
  ExceptionInfo *exception)
</pre>

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

<dd>
</dd>

<dd> </dd>
<dl class="dl-horizontal">
<dt>image_info</dt>
<dd>the image info. </dd>

<dd> </dd>
<dt>command</dt>
<dd>Choose from ConvertImageCommand, IdentifyImageCommand, MogrifyImageCommand, CompositeImageCommand, CompareImagesCommand, ConjureImageCommand, StreamImageCommand, ImportImageCommand, DisplayImageCommand, or AnimateImageCommand. </dd>

<dd> </dd>
<dt>argc</dt>
<dd>Specifies a pointer to an integer describing the number of elements in the argument vector. </dd>

<dd> </dd>
<dt>argv</dt>
<dd>Specifies a pointer to a text array containing the command line arguments. </dd>

<dd> </dd>
<dt>metadata</dt>
<dd>any metadata is returned here. </dd>

<dd> </dd>
<dt>exception</dt>
<dd>return any errors or warnings in this structure. </dd>

<dd>  </dd>
</dl>
</div>
  <footer class="magick-footer">
    <div class="magick-nav-item pull-left">
      <a href="../support.html">Donate</a>
    </div>
    <p><a href="../sitemap.html">Sitemap</a> •
    <a href="../links.html">Related</a> •
    <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Image Studio</a> •
    <a href="http://jqmagick.imagemagick.org/">JqMagick</a>
</p>
    <p><a href="mogrify.html#">Back to top</a> •
    <a href="http://pgp.mit.edu:11371/pks/lookup?op=get&amp;search=0x89AB63D48277377A">Public Key</a> •
    <a href="http://nextgen.imagemagick.org/script/contact.php">Contact Us</a></p>
    <p><small>©  1999-2015 ImageMagick Studio LLC</small></p>
  </footer>
</div><!-- /.container -->

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  <script src="../js/bootstrap.min.js"></script>
  <script type="text/javascript">
    /* <![CDATA[ */
    (function() {
        var s = document.createElement('offline-script'), t = document.getElementsByTagName('offline-script')[0];
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'http://api.flattr.com/js/0.6/load.js?mode=auto';
        t.parentNode.insertBefore(s, t);
    })();
    /* ]]> */
  </script>
</div>
</body>
</html>
