PTdecode/CImg-1.3.0/html/reference/group__cimg__options.html

Mon, 03 Aug 2009 23:41:04 +0100

author
Philip Pemberton <philpem@philpem.me.uk>
date
Mon, 03 Aug 2009 23:41:04 +0100
changeset 11
69416826d18c
parent 5
1204ebf9340d
permissions
-rwxr-xr-x

added dep/*.d and obj/*.o to hgignore

philpem@5 1 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
philpem@5 2 <head>
philpem@5 3 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></meta>
philpem@5 4 <title>The CImg Library - C++ Template Image Processing Toolkit</title>
philpem@5 5 <meta content="David Tschumperle" name="author"></meta>
philpem@5 6 <link rel="shortcut icon" type="image/x-icon" href="http://cimg.sourceforge.net/favicon.ico"></link>
philpem@5 7 <link rel="icon" type="image/png" href="favicon.png"></link>
philpem@5 8 <link href="doxygen.css" rel="stylesheet" type="text/css">
philpem@5 9 <link href="tabs.css" rel="stylesheet" type="text/css">
philpem@5 10 <style type="text/css">
philpem@5 11 <!--
philpem@5 12 body {background-color:white; font-family:sans-serif; }
philpem@5 13 a:active{text-decoration:none; color:#303090}
philpem@5 14 a:link{text-decoration:none; color:#303090}
philpem@5 15 a:visited{text-decoration:none; color:#303090}
philpem@5 16 a:hover{text-decoration:underline; color:#4E9F71}
philpem@5 17 -->
philpem@5 18 </style>
philpem@5 19 <script language="JavaScript" type="text/javascript">
philpem@5 20 <!-- Original: Eric King (eric_andrew_king@hotmail.com) is used to display images in popup windows -->
philpem@5 21 <!-- Web Site: http://redrival.com/eak/ -->
philpem@5 22 <!-- This script and many more are available free online at -->
philpem@5 23 <!-- The JavaScript Source!! http://javascript.internet.com -->
philpem@5 24 <!-- Begin
philpem@5 25 function NewWindow(mypage, myname, w, h, scroll) {
philpem@5 26 var winl = (screen.width - w) / 2;
philpem@5 27 var wint = (screen.height - h) / 2;
philpem@5 28 winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars='+scroll+',resizable'
philpem@5 29 win = window.open(mypage, myname, winprops)
philpem@5 30 if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
philpem@5 31 }
philpem@5 32 // End -->
philpem@5 33 </script>
philpem@5 34 </head>
philpem@5 35 <body>
philpem@5 36 <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
philpem@5 37 <tbody><tr><td>
philpem@5 38 <hr noshade="noshade" size="1" width="90%"></hr>
philpem@5 39 <center>
philpem@5 40 <br/>
philpem@5 41 <a href="http://cimg.sourceforge.net"><img src="http://cimg.sourceforge.net/img/CImgLogo.jpg" alt="" border="0"></img></a><br/>
philpem@5 42 <br/>
philpem@5 43 </center>
philpem@5 44 <hr noshade="noshade" size="1" width="90%"></hr>
philpem@5 45 <center>
philpem@5 46 <table bgcolor="#EEEEFF" style="width: 90%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="3" cellspacing="0">
philpem@5 47 <tbody><tr><td style="text-align: center; vertical-align: top;">
philpem@5 48 <font color="#FFFFFF" face="Arial,Helvetica" size="-1">
philpem@5 49 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/index.shtml">Main</a> <b>]</b>
philpem@5 50 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/news.shtml">News</a><b>] </b>
philpem@5 51 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/download.shtml">Download</a> <b>]</b>
philpem@5 52 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/screenshots.shtml">Screenshots</a> <b>]</b>
philpem@5 53 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/reference/group__cimg__faq.html">FAQ</a> <b>]</b>
philpem@5 54 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/reference/group__cimg__tutorial.html">Tutorial</a> <b>]</b>
philpem@5 55 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/reference/index.html">Documentation</a> <b>]</b>
philpem@5 56 <b>[</b> <a target="_parent" href="http://sourceforge.net/forum/forum.php?forum_id=334630">Forum</a> <b>]</b>
philpem@5 57 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/chat.shtml">Chat</a> <b>]</b>
philpem@5 58 <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/links.shtml">Links</a> <b>]</b>
philpem@5 59 </font>
philpem@5 60 </td></tr></tbody>
philpem@5 61 </table>
philpem@5 62 </center>
philpem@5 63 <hr noshade="noshade" size="1" width="90%"></hr>
philpem@5 64 </td></tr></tbody>
philpem@5 65 </table>
philpem@5 66 <!-- Generated by Doxygen 1.5.7.1 -->
philpem@5 67 <script type="text/javascript">
philpem@5 68 <!--
philpem@5 69 function changeDisplayState (e){
philpem@5 70 var num=this.id.replace(/[^[0-9]/g,'');
philpem@5 71 var button=this.firstChild;
philpem@5 72 var sectionDiv=document.getElementById('dynsection'+num);
philpem@5 73 if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
philpem@5 74 sectionDiv.style.display='block';
philpem@5 75 button.src='open.gif';
philpem@5 76 }else{
philpem@5 77 sectionDiv.style.display='none';
philpem@5 78 button.src='closed.gif';
philpem@5 79 }
philpem@5 80 }
philpem@5 81 function initDynSections(){
philpem@5 82 var divs=document.getElementsByTagName('div');
philpem@5 83 var sectionCounter=1;
philpem@5 84 for(var i=0;i<divs.length-1;i++){
philpem@5 85 if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
philpem@5 86 var header=divs[i];
philpem@5 87 var section=divs[i+1];
philpem@5 88 var button=header.firstChild;
philpem@5 89 if (button!='IMG'){
philpem@5 90 divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
philpem@5 91 button=document.createElement('img');
philpem@5 92 divs[i].insertBefore(button,divs[i].firstChild);
philpem@5 93 }
philpem@5 94 header.style.cursor='pointer';
philpem@5 95 header.onclick=changeDisplayState;
philpem@5 96 header.id='dynheader'+sectionCounter;
philpem@5 97 button.src='closed.gif';
philpem@5 98 section.id='dynsection'+sectionCounter;
philpem@5 99 section.style.display='none';
philpem@5 100 section.style.marginLeft='14px';
philpem@5 101 sectionCounter++;
philpem@5 102 }
philpem@5 103 }
philpem@5 104 }
philpem@5 105 window.onload = initDynSections;
philpem@5 106 -->
philpem@5 107 </script>
philpem@5 108 <div class="navigation" id="top">
philpem@5 109 <div class="tabs">
philpem@5 110 <ul>
philpem@5 111 <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
philpem@5 112 <li><a href="modules.html"><span>Modules</span></a></li>
philpem@5 113 <li><a href="namespaces.html"><span>Namespaces</span></a></li>
philpem@5 114 <li><a href="annotated.html"><span>Classes</span></a></li>
philpem@5 115 </ul>
philpem@5 116 </div>
philpem@5 117 </div>
philpem@5 118 <div class="contents">
philpem@5 119 <h1>Retrieving Command Line Arguments.</h1><table border="0" cellpadding="0" cellspacing="0">
philpem@5 120 <tr><td></td></tr>
philpem@5 121 </table>
philpem@5 122 The CImg library offers facilities to retrieve command line arguments in a console-based program, as it is a commonly needed operation. Three macros <code>cimg_usage()</code>, <code>cimg_help()</code> and <code>cimg_option()</code> are defined for this purpose. Using these macros allows to easily retrieve options values from the command line. Invoking the compiled executable with the option <code>-h</code> or <code>--help</code> will automatically display the program usage, followed by the list of requested options.<h2><a class="anchor" name="so1">
philpem@5 123 The cimg_usage() macro</a></h2>
philpem@5 124 The macro <code>cimg_usage(usage)</code> may be used to describe the program goal and usage. It is generally inserted one time after the <code>int main(int argc,char **argv)</code> definition.<p>
philpem@5 125 <dl compact><dt><b>Parameters:</b></dt><dd>
philpem@5 126 <table border="0" cellspacing="2" cellpadding="0">
philpem@5 127 <tr><td valign="top"></td><td valign="top"><em>usage</em>&nbsp;</td><td>: A string describing the program goal and usage. </td></tr>
philpem@5 128 </table>
philpem@5 129 </dl>
philpem@5 130 <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The function where <code>cimg_usage()</code> is used must have correctly defined <code>argc</code> and <code>argv</code> variables.</dd></dl>
philpem@5 131 <h2><a class="anchor" name="so1_5">
philpem@5 132 The cimg_help() macro</a></h2>
philpem@5 133 The macro <code>cimg_help(str)</code> will display the string <code>str</code> only if the <code>-help</code> or <code>--help</code> option are invoked when running the programm.<h2><a class="anchor" name="so2">
philpem@5 134 The cimg_option() macro</a></h2>
philpem@5 135 The macro <code>cimg_option(name,default,usage)</code> may be used to retrieve an option value from the command line.<p>
philpem@5 136 <dl compact><dt><b>Parameters:</b></dt><dd>
philpem@5 137 <table border="0" cellspacing="2" cellpadding="0">
philpem@5 138 <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>: The name of the option to be retrieved from the command line. </td></tr>
philpem@5 139 <tr><td valign="top"></td><td valign="top"><em>default</em>&nbsp;</td><td>: The default value returned by the macro if no options <code>name</code> has been specified when running the program. </td></tr>
philpem@5 140 <tr><td valign="top"></td><td valign="top"><em>usage</em>&nbsp;</td><td>: A brief explanation of the option. If <code>usage==0</code>, the option won't appear on the option list when invoking the executable with options <code>-h</code> or <code>--help</code> (hidden option).</td></tr>
philpem@5 141 </table>
philpem@5 142 </dl>
philpem@5 143 <dl class="return" compact><dt><b>Returns:</b></dt><dd><code>cimg_option()</code> returns an object that has the <em>same</em> <em>type</em> than the default value <code>default</code>. The return value is equal to the one specified on the command line. If no such option have been specified, the return value is equal to the default value <code>default</code>. Warning, this can be confusing in some situations (look at the end of the next section). </dd></dl>
philpem@5 144 <dl class="pre" compact><dt><b>Precondition:</b></dt><dd>The function where <code>cimg_option()</code> is used must have correctly defined <code>argc</code> and <code>argv</code> variables.</dd></dl>
philpem@5 145 <h2><a class="anchor" name="so3">
philpem@5 146 Example of use</a></h2>
philpem@5 147 The code below uses the macros <code>cimg_usage()</code> and <code>cimg_option()</code>. It loads an image, smoothes it an quantifies it with a specified number of values. <div class="fragment"><pre class="fragment"><span class="preprocessor"> #include "CImg.h"</span>
philpem@5 148 <span class="keyword">using namespace </span>cimg_library;
philpem@5 149 <span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv) {
philpem@5 150 cimg_usage(<span class="stringliteral">"Retrieve command line arguments"</span>);
philpem@5 151 <span class="keyword">const</span> <span class="keywordtype">char</span>* filename = cimg_option(<span class="stringliteral">"-i"</span>,<span class="stringliteral">"image.gif"</span>,<span class="stringliteral">"Input image file"</span>);
philpem@5 152 <span class="keyword">const</span> <span class="keywordtype">char</span>* output = cimg_option(<span class="stringliteral">"-o"</span>,(<span class="keywordtype">char</span>*)0,<span class="stringliteral">"Output image file"</span>);
philpem@5 153 <span class="keyword">const</span> <span class="keywordtype">double</span> sigma = cimg_option(<span class="stringliteral">"-s"</span>,1.0,<span class="stringliteral">"Standard variation of the gaussian smoothing"</span>);
philpem@5 154 <span class="keyword">const</span> <span class="keywordtype">int</span> nblevels = cimg_option(<span class="stringliteral">"-n"</span>,16,<span class="stringliteral">"Number of quantification levels"</span>);
philpem@5 155 <span class="keyword">const</span> <span class="keywordtype">bool</span> hidden = cimg_option(<span class="stringliteral">"-hidden"</span>,<span class="keyword">false</span>,0); <span class="comment">// This is a hidden option</span>
philpem@5 156
philpem@5 157 CImg&lt;unsigned char&gt; img(filename);
philpem@5 158 img.blur(sigma).quantize(nblevels);
philpem@5 159 <span class="keywordflow">if</span> (output) img.save(output); <span class="keywordflow">else</span> img.display(<span class="stringliteral">"Output image"</span>);
philpem@5 160 <span class="keywordflow">if</span> (hidden) std::fprintf(stderr,<span class="stringliteral">"You found me !\n"</span>);
philpem@5 161 <span class="keywordflow">return</span> 0;
philpem@5 162 }
philpem@5 163 </pre></div><p>
philpem@5 164 Invoking the corresponding executable with <code>test -h -hidden -n 20 -i foo.jpg</code> will display : <div class="fragment"><pre class="fragment">
philpem@5 165 ./test -h -hidden -n 20 -i foo.jpg
philpem@5 166
philpem@5 167 test : Retrieve command line arguments (Oct 16 2004, 12:34:26)
philpem@5 168
philpem@5 169 -i = foo.jpg : Input image file
philpem@5 170 -o = 0 : Output image file
philpem@5 171 -s = 1 : Standard variation of the gaussian smoothing
philpem@5 172 -n = 20 : Number of quantification levels
philpem@5 173
philpem@5 174 You found me !
philpem@5 175 </pre></div><p>
philpem@5 176 <dl class="warning" compact><dt><b>Warning:</b></dt><dd>As the type of object returned by the macro <code>cimg_option(option,default,usage)</code> is defined by the type of <code>default</code>, undesired casts may appear when writting code such as : <div class="fragment"><pre class="fragment"> <span class="keyword">const</span> <span class="keywordtype">double</span> sigma = cimg_option(<span class="stringliteral">"-val"</span>,0,<span class="stringliteral">"A floating point value"</span>);
philpem@5 177 </pre></div> In this case, <code>sigma</code> will always be equal to an integer (since the default value <code>0</code> is an integer). When passing a float value on the command line, a <em>float</em> <em>to</em> <em>integer</em> cast is then done, truncating the given parameter to an integer value (this is surely not a desired behavior). You must specify <code>0.0</code> as the default value in this case.</dd></dl>
philpem@5 178 <h2><a class="anchor" name="so4">
philpem@5 179 How to learn more about command line options ?</a></h2>
philpem@5 180 You should take a look at the examples <code>examples/gmic.cpp</code> provided in the CImg Library package. This is a command line based image converter which intensively uses the <code>cimg_option()</code> and <code>cimg_usage()</code> macros to retrieve command line parameters. </div>
philpem@5 181 <hr noshade="noshade" size="1" width="100%">
philpem@5 182 <a href="http://sourceforge.net">
philpem@5 183 <img src="http://sourceforge.net/sflogo.php?group_id=96492&amp;type=3" border="0" height="37" width="125"></img>
philpem@5 184 </a>
philpem@5 185 <!-- Start of StatCounter Code -->
philpem@5 186 <script type="text/javascript" language="javascript">
philpem@5 187 <!--
philpem@5 188 var sc_project=895001;
philpem@5 189 var sc_invisible=1;
philpem@5 190 var sc_partition=7;
philpem@5 191 var sc_security="5ea85181";
philpem@5 192 //-->
philpem@5 193 </script>
philpem@5 194 <script type="text/javascript" language="javascript" src="http://www.statcounter.com/counter/counter.js"></script><noscript><a href="http://www.statcounter.com/" target="_blank"><img src="http://c8.statcounter.com/counter.php?sc_project=895001&amp;java=0&amp;security=5ea85181&amp;invisible=1" alt="counter stats" border="0"></a> </noscript>
philpem@5 195 <!-- End of StatCounter Code -->
philpem@5 196 </body>
philpem@5 197 </html>