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

Mon, 03 Aug 2009 14:09:20 +0100

author
Philip Pemberton <philpem@philpem.me.uk>
date
Mon, 03 Aug 2009 14:09:20 +0100
changeset 5
1204ebf9340d
permissions
-rwxr-xr-x

added P-touch decoder source

     1  xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     2 <head>
     3 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></meta>
     4 <title>The CImg Library - C++ Template Image Processing Toolkit</title>
     5 <meta content="David Tschumperle" name="author"></meta>
     6 <link rel="shortcut icon" type="image/x-icon" href="http://cimg.sourceforge.net/favicon.ico"></link>
     7 <link rel="icon" type="image/png" href="favicon.png"></link>
     8 <link href="doxygen.css" rel="stylesheet" type="text/css">
     9 <link href="tabs.css" rel="stylesheet" type="text/css">
    10 <style type="text/css">
    11 <!--
    12 body {background-color:white; font-family:sans-serif; }
    13 a:active{text-decoration:none; color:#303090}
    14 a:link{text-decoration:none; color:#303090}
    15 a:visited{text-decoration:none; color:#303090}
    16 a:hover{text-decoration:underline; color:#4E9F71}
    17 -->
    18 </style>
    19 <script language="JavaScript" type="text/javascript">
    20   <!-- Original:  Eric King (eric_andrew_king@hotmail.com) is used to display images in popup windows -->
    21   <!-- Web Site:  http://redrival.com/eak/ -->
    22   <!-- This script and many more are available free online at -->
    23   <!-- The JavaScript Source!! http://javascript.internet.com -->
    24   <!-- Begin
    25   function NewWindow(mypage, myname, w, h, scroll) {
    26   var winl = (screen.width - w) / 2;
    27   var wint = (screen.height - h) / 2;
    28   winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars='+scroll+',resizable'
    29   win = window.open(mypage, myname, winprops)
    30   if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
    31   }
    32   //  End -->
    33 </script>
    34 </head>
    35 <body>
    36  <table align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
    37   <tbody><tr><td>
    38    <hr noshade="noshade" size="1" width="90%"></hr>
    39    <center>
    40    <br/>
    41    <a href="http://cimg.sourceforge.net"><img src="http://cimg.sourceforge.net/img/CImgLogo.jpg" alt="" border="0"></img></a><br/>
    42    <br/>
    43    </center>
    44    <hr noshade="noshade" size="1" width="90%"></hr>
    45    <center>
    46    <table bgcolor="#EEEEFF" style="width: 90%; text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="3" cellspacing="0">
    47    <tbody><tr><td style="text-align: center; vertical-align: top;">
    48    <font color="#FFFFFF" face="Arial,Helvetica" size="-1">
    49    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/index.shtml">Main</a> <b>]</b>
    50    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/news.shtml">News</a><b>] </b>
    51    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/download.shtml">Download</a> <b>]</b>
    52    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/screenshots.shtml">Screenshots</a> <b>]</b>
    53    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/reference/group__cimg__faq.html">FAQ</a> <b>]</b>
    54    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/reference/group__cimg__tutorial.html">Tutorial</a> <b>]</b>
    55    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/reference/index.html">Documentation</a> <b>]</b>
    56    <b>[</b> <a target="_parent" href="http://sourceforge.net/forum/forum.php?forum_id=334630">Forum</a> <b>]</b>
    57    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/chat.shtml">Chat</a> <b>]</b>
    58    <b>[</b> <a target="_parent" href="http://cimg.sourceforge.net/links.shtml">Links</a> <b>]</b>
    59    </font>
    60    </td></tr></tbody>
    61    </table>
    62    </center>
    63    <hr noshade="noshade" size="1" width="90%"></hr>
    64   </td></tr></tbody>
    65 </table>
    66 <!-- Generated by Doxygen 1.5.7.1 -->
    67 <script type="text/javascript">
    68 <!--
    69 function changeDisplayState (e){
    70   var num=this.id.replace(/[^[0-9]/g,'');
    71   var button=this.firstChild;
    72   var sectionDiv=document.getElementById('dynsection'+num);
    73   if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
    74     sectionDiv.style.display='block';
    75     button.src='open.gif';
    76   }else{
    77     sectionDiv.style.display='none';
    78     button.src='closed.gif';
    79   }
    80 }
    81 function initDynSections(){
    82   var divs=document.getElementsByTagName('div');
    83   var sectionCounter=1;
    84   for(var i=0;i<divs.length-1;i++){
    85     if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
    86       var header=divs[i];
    87       var section=divs[i+1];
    88       var button=header.firstChild;
    89       if (button!='IMG'){
    90         divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
    91         button=document.createElement('img');
    92         divs[i].insertBefore(button,divs[i].firstChild);
    93       }
    94       header.style.cursor='pointer';
    95       header.onclick=changeDisplayState;
    96       header.id='dynheader'+sectionCounter;
    97       button.src='closed.gif';
    98       section.id='dynsection'+sectionCounter;
    99       section.style.display='none';
   100       section.style.marginLeft='14px';
   101       sectionCounter++;
   102     }
   103   }
   104 }
   105 window.onload = initDynSections;
   106 -->
   107 </script>
   108 <div class="navigation" id="top">
   109   <div class="tabs">
   110     <ul>
   111       <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
   112       <li><a href="modules.html"><span>Modules</span></a></li>
   113       <li><a href="namespaces.html"><span>Namespaces</span></a></li>
   114       <li><a href="annotated.html"><span>Classes</span></a></li>
   115     </ul>
   116   </div>
   117 </div>
   118 <div class="contents">
   119 <h1>CImg Library Overview</h1><table border="0" cellpadding="0" cellspacing="0">
   120 <tr><td></td></tr>
   121 </table>
   122 The <b>CImg Library</b> is an image processing library, designed for C++ programmers. It provides useful classes and functions to load/save, display and process various types of images.<h2><a class="anchor" name="s1">
   123 Library structure</a></h2>
   124 The CImg Library consists in a <b>single header file</b> CImg.h providing a set of C++ template classes that can be used in your own sources, to load/save, process and display images or list of images. Very portable (Unix/X11,Windows, MacOS X, FreeBSD,..), efficient, simple to use, it's a pleasant toolkit for coding image processing stuffs in C++.<p>
   125 The header file CImg.h contains all the classes and functions that compose the library itself. This is one originality of the CImg Library. This particularly means that :<ul>
   126 <li>No pre-compilation of the library is needed, since the compilation of the CImg functions is done at the same time as the compilation of your own C++ code.</li><li>No complex dependencies have to be handled : Just include the CImg.h file, and you get a working C++ image processing toolkit.</li><li>The compilation is done on the fly : only CImg functionalities really used by your program are compiled and appear in the compiled executable program. This leads to very compact code, without any unused stuffs.</li><li>Class members and functions are inlined, leading to better performance during the program execution.</li></ul>
   127 <p>
   128 The CImg Library is structured as follows :<p>
   129 <ul>
   130 <li>All library classes and functions are defined in the namespace <a class="el" href="namespacecimg__library.html">cimg_library</a>. This namespace encapsulates the library functionalities and avoid any class name collision that could happen with other includes. Generally, one uses this namespace as a default namespace : <div class="fragment"><pre class="fragment"><span class="preprocessor">  #include "CImg.h"</span>
   131   <span class="keyword">using namespace </span>cimg_library;
   132   ...
   133 </pre></div></li></ul>
   134 <p>
   135 <ul>
   136 <li>The namespace <a class="el" href="namespacecimg__library_1_1cimg.html">cimg_library::cimg</a> defines a set of <em>low-level</em> functions and variables used by the library. Documented functions in this namespace can be safely used in your own program. But, <b>never</b> use the <a class="el" href="namespacecimg__library_1_1cimg.html">cimg_library::cimg</a> namespace as a default namespace, since it contains functions whose names are already defined in the standard C/C++ library.</li></ul>
   137 <p>
   138 <ul>
   139 <li>The class <a class="el" href="structcimg__library_1_1CImg.html">cimg_library::CImg</a>&lt;T&gt; represents images up to 4-dimensions wide, containing pixels of type <code>T</code> (template parameter). This is actually the main class of the library.</li></ul>
   140 <p>
   141 <ul>
   142 <li>The class <a class="el" href="structcimg__library_1_1CImgList.html">cimg_library::CImgList</a>&lt;T&gt; represents lists of cimg_library::CImg&lt;T&gt; images. It can be used for instance to store different frames of an image sequence.</li></ul>
   143 <p>
   144 <ul>
   145 <li>The class <a class="el" href="structcimg__library_1_1CImgDisplay.html">cimg_library::CImgDisplay</a> is able to display images or image lists into graphical display windows. As you may guess, the code of this class is highly system-dependent but this is transparent for the programmer, as environment variables are automatically set by the CImg library (see also <a class="el" href="group__cimg__environment.html">Setting Environment Variables</a>).</li></ul>
   146 <p>
   147 <ul>
   148 <li>The class <a class="el" href="structcimg__library_1_1CImgException.html">cimg_library::CImgException</a> (and its subclasses) are used by the library to throw exceptions when errors occur. Those exceptions can be catched with a bloc <code>try { ..} catch (CImgException) { .. }</code>. Subclasses define precisely the type of encountered errors.</li></ul>
   149 <p>
   150 Knowing these four classes is <b>enough</b> to get benefit of the CImg Library functionalities.<h2><a class="anchor" name="s2">
   151 CImg version of "Hello world".</a></h2>
   152 Below is a very simple code that creates a "Hello World" image. This shows you basically how a CImg program looks like.<p>
   153 <div class="fragment"><pre class="fragment"><span class="preprocessor">  #include "CImg.h"</span>
   154   <span class="keyword">using namespace </span>cimg_library;
   156   <span class="keywordtype">int</span> main() {
   157     CImg&lt;unsigned char&gt; img(640,400,1,3);        <span class="comment">// Define a 640x400 color image with 8 bits per color component.</span>
   158     img.fill(0);                                 <span class="comment">// Set pixel values to 0 (color : black)</span>
   159     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> purple[] = { 255,0,255 };      <span class="comment">// Define a purple color</span>
   160     img.draw_text(<span class="stringliteral">"Hello World"</span>,100,100,purple); <span class="comment">// Draw a purple "Hello world" at coordinates (100,100).</span>
   161     img.display(<span class="stringliteral">"My first CImg code"</span>);           <span class="comment">// Display the image in a display window.</span>
   162     <span class="keywordflow">return</span> 0;
   163   }
   164 </pre></div><p>
   165 Which can be also written in a more compact way as :<p>
   166 <div class="fragment"><pre class="fragment"><span class="preprocessor">  #include "CImg.h"</span>
   167   <span class="keyword">using namespace </span>cimg_library;
   169   <span class="keywordtype">int</span> main() {
   170     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> purple[] = { 255,0,255 };
   171     CImg&lt;unsigned char&gt;(640,400,1,3,0).draw_text(<span class="stringliteral">"Hello World"</span>,100,100,purple).display(<span class="stringliteral">"My first CImg code"</span>);
   172     <span class="keywordflow">return</span> 0;
   173   }
   174 </pre></div><p>
   175 Generally, you can write very small code that performs complex image processing tasks. The CImg Library is very simple to use and provide a lot of interesting algorithms for image manipulation.<h2><a class="anchor" name="s3">
   176 How to compile ?</a></h2>
   177 The CImg library is a very light and user-friendly library : only standard system libraries are used. It avoid to handle complex dependancies and problems with library compatibility. The only thing you need is a (quite modern) C++ compiler :<p>
   178 <ul>
   179 <li><b>Microsoft Visual C++ 6.0, Visual Studio.NET and Visual Express Edition</b> : Use project files and solution files provided in the CImg Library package (directory 'compilation/') to see how it works.</li><li><b>Intel ICL compiler</b> : Use the following command to compile a CImg-based program with ICL : <div class="fragment"><pre class="fragment">  icl /Ox hello_world.cpp user32.lib gdi32.lib
   180 </pre></div></li><li><b>g++ (MingW windows version)</b> : Use the following command to compile a CImg-based program with g++, on Windows : <div class="fragment"><pre class="fragment">  g++ -o hello_word.exe hello_word.cpp -O2 -lgdi32
   181 </pre></div></li><li><b>g++ (Linux version)</b> : Use the following command to compile a CImg-based program with g++, on Linux : <div class="fragment"><pre class="fragment">  g++ -o hello_word.exe hello_world.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11
   182 </pre></div></li><li><b>g++ (Solaris version)</b> : Use the following command to compile a CImg-based program with g++, on Solaris : <div class="fragment"><pre class="fragment">  g++ -o hello_word.exe hello_world.cpp -O2 -lm -lpthread -R/usr/X11R6/lib -lrt -lnsl -lsocket
   183 </pre></div></li><li><b>g++ (Mac OS X version)</b> : Use the following command to compile a CImg-based program with g++, on Mac OS X : <div class="fragment"><pre class="fragment">  g++ -o hello_word.exe hello_world.cpp -O2 -lm -lpthread -L/usr/X11R6/lib -lm -lpthread -lX11
   184 </pre></div></li><li><b>Dev-Cpp</b> : Use the project file provided in the CImg library package to see how it works.</li></ul>
   185 <p>
   186 If you are using another compilers and encounter problems, please <a href="http://www.greyc.ensicaen.fr/~dtschump">write me</a> since maintaining compatibility is one of the priority of the CImg Library. Nevertheless, old compilers that does not respect the C++ norm will not support the CImg Library.<h2><a class="anchor" name="s4">
   187 What's next ?</a></h2>
   188 If you are ready to get more, and to start writing more serious programs with CImg, you are invited to go to the <a class="el" href="group__cimg__tutorial.html">Tutorial : Getting Started.</a> section. </div>
   189 <hr noshade="noshade" size="1" width="100%">
   190 <a href="http://sourceforge.net">
   191 <img src="http://sourceforge.net/sflogo.php?group_id=96492&amp;type=3" border="0" height="37" width="125"></img>
   192 </a>
   193 <!-- Start of StatCounter Code -->
   194 <script type="text/javascript" language="javascript">
   195 <!--
   196 var sc_project=895001;
   197 var sc_invisible=1;
   198 var sc_partition=7;
   199 var sc_security="5ea85181";
   200 //-->
   201 </script>
   202 <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>
   203 <!-- End of StatCounter Code -->
   204 </body>
   205 </html>