Mon, 03 Aug 2009 23:41:04 +0100
added dep/*.d and obj/*.o to hgignore
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 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><T> 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><T> represents lists of cimg_library::CImg<T> 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<unsigned char> 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<unsigned char>(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&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&java=0&security=5ea85181&invisible=1" alt="counter stats" border="0"></a> </noscript>
203 <!-- End of StatCounter Code -->
204 </body>
205 </html>