Imported Upstream version 1.71.0
[platform/upstream/boost.git] / libs / gil / io / doc / html / gil / io / tutorial.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Tutorial</title>
5 <link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
7 <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.GIL.IO">
8 <link rel="up" href="../../index.html" title="Chapter&#160;1.&#160;Boost.GIL.IO">
9 <link rel="prev" href="../../index.html" title="Chapter&#160;1.&#160;Boost.GIL.IO">
10 <link rel="next" href="using_io.html" title="Using IO">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="../../index.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../index.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="using_io.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section gil_io_tutorial">
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="gil.io.tutorial"></a><a class="link" href="tutorial.html" title="Tutorial">Tutorial</a>
28 </h2></div></div></div>
29 <p>
30       Thanks to modern C++ programming techniques the interface for this library
31       is rather small and easy to use. In this tutorial I'll give you a short walk-around
32       on how to use this boost::gil extension. For more details please refer to section
33       3.
34     </p>
35 <p>
36       Since this is an extension to boost::gil I expect the user to have some very
37       basic understanding of the gil ( generic image library ). Please see here for
38       the help.
39     </p>
40 <h3>
41 <a name="gil.io.tutorial.h0"></a>
42       <span class="phrase"><a name="gil.io.tutorial.header_files"></a></span><a class="link" href="tutorial.html#gil.io.tutorial.header_files">Header
43       Files</a>
44     </h3>
45 <p>
46       The header files to be included all have the same format. For instance, tiff_all.hpp
47       will allow to read and write. Whereas, tiff_read.hpp only allows for reading.
48       If the user only wants to write jpeg's include jpeg_write.hpp. All formats
49       provide these three types of header files:
50     </p>
51 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
52 <li class="listitem">
53           xxx_all.hpp
54         </li>
55 <li class="listitem">
56           xxx_read.hpp
57         </li>
58 <li class="listitem">
59           xxx_write.hpp
60         </li>
61 </ul></div>
62 <p>
63       xxx stands for image format.
64     </p>
65 <h3>
66 <a name="gil.io.tutorial.h1"></a>
67       <span class="phrase"><a name="gil.io.tutorial.reading_an_image"></a></span><a class="link" href="tutorial.html#gil.io.tutorial.reading_an_image">Reading
68       An Image</a>
69     </h3>
70 <p>
71       Probably the most common case to read a tiff image can be done as follows:
72     </p>
73 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">filename</span><span class="special">(</span> <span class="string">"image.tif"</span> <span class="special">);</span>
74 <span class="identifier">rgb8_image_t</span> <span class="identifier">img</span><span class="special">;</span>
75 <span class="identifier">read_image</span><span class="special">(</span> <span class="identifier">filename</span><span class="special">,</span> <span class="identifier">img</span><span class="special">,</span> <span class="identifier">tiff_tag</span><span class="special">()</span> <span class="special">);</span>
76 </pre>
77 <p>
78       The code would be same for all other image formats. The only thing that needs
79       to change is the tag type ( tiff_tag ) in the read_image call. The read_image()
80       expects the supplied image type to be compatible with the image stored in the
81       file. If the user doesn't know what format an image has he/she can use read_and_convert_image().
82       Another important fact is that read_image() will allocate the appropriate memory
83       needed for the read operation. There are read_view or read_and_convert_view
84       counterparts, if the memory is already allocated.
85     </p>
86 <p>
87       Sometimes the user only wants to read a sub-part of an image, then the above
88       call would look as follows:
89     </p>
90 <pre class="programlisting"><span class="identifier">read_image</span><span class="special">(</span> <span class="identifier">filename</span>
91           <span class="special">,</span> <span class="identifier">img</span>
92           <span class="special">,</span> <span class="identifier">image_read_settings</span><span class="special">&lt;</span> <span class="identifier">tiff_tag</span> <span class="special">&gt;(</span> <span class="identifier">point_t</span><span class="special">(</span> <span class="number">0</span><span class="special">,</span> <span class="number">0</span> <span class="special">),</span> <span class="identifier">point_t</span><span class="special">(</span> <span class="number">50</span><span class="special">,</span> <span class="number">50</span> <span class="special">)</span> <span class="special">)</span>
93           <span class="special">);</span>
94 </pre>
95 <p>
96       The image_read_settings class will provide the user with image format independent
97       reading setting but can also serves as a pointer for format dependent settings.
98       Please see the specific image format sections <a class="link" href="using_io.html#gil.io.using_io.supported_image_formats">Supported
99       Image Formats</a> for more details.
100     </p>
101 <h3>
102 <a name="gil.io.tutorial.h2"></a>
103       <span class="phrase"><a name="gil.io.tutorial.writing_an_image"></a></span><a class="link" href="tutorial.html#gil.io.tutorial.writing_an_image">Writing
104       An Image</a>
105     </h3>
106 <p>
107       Besides reading the information also writing is the second part of this boost::gil
108       extension. Writing is a lot simpler than reading since an existing image view
109       contains all the information. For instance writing an image can be done as
110       follows:
111     </p>
112 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">filename</span><span class="special">(</span> <span class="string">"image.tif"</span> <span class="special">);</span>
113 <span class="identifier">rgb8_image_t</span> <span class="identifier">img</span><span class="special">(</span> <span class="number">640</span><span class="special">,</span> <span class="number">480</span> <span class="special">);</span>
114
115 <span class="comment">// write data into image</span>
116
117 <span class="identifier">write_view</span><span class="special">(</span> <span class="identifier">filename</span>
118           <span class="special">,</span> <span class="identifier">view</span><span class="special">(</span> <span class="identifier">img</span> <span class="special">)</span>
119           <span class="special">,</span> <span class="identifier">tiff_tag</span><span class="special">()</span>
120           <span class="special">);</span>
121 </pre>
122 <p>
123       The interface is similar to reading an image. To add image format specific
124       parameter the user can use image_write_info class. For instance, a user can
125       specify the jpeg quality when writing like this:
126     </p>
127 <pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">filename</span><span class="special">(</span> <span class="string">"image.jpg"</span> <span class="special">);</span>
128 <span class="identifier">rgb8_image_t</span> <span class="identifier">img</span><span class="special">(</span> <span class="number">640</span><span class="special">,</span> <span class="number">480</span> <span class="special">);</span>
129
130 <span class="comment">// write data into image</span>
131
132 <span class="identifier">write_view</span><span class="special">(</span> <span class="identifier">filename</span>
133           <span class="special">,</span> <span class="identifier">view</span><span class="special">(</span> <span class="identifier">img</span> <span class="special">)</span>
134           <span class="special">,</span> <span class="identifier">image_write_info</span><span class="special">&lt;</span> <span class="identifier">jpeg_tag</span> <span class="special">&gt;(</span> <span class="number">95</span> <span class="special">)</span>
135           <span class="special">);</span>
136 </pre>
137 <p>
138       The above example will write an image where the jpeg quality is set to 95 percent.
139     </p>
140 <h3>
141 <a name="gil.io.tutorial.h3"></a>
142       <span class="phrase"><a name="gil.io.tutorial.reading_and_writing_in_memory_buffers"></a></span><a class="link" href="tutorial.html#gil.io.tutorial.reading_and_writing_in_memory_buffers">Reading
143       And Writing In-Memory Buffers</a>
144     </h3>
145 <p>
146       Reading and writing in-memory buffers are supported as well. See as follows:
147     </p>
148 <pre class="programlisting"><span class="comment">// 1. Read an image.</span>
149 <span class="identifier">ifstream</span> <span class="identifier">in</span><span class="special">(</span> <span class="string">"test.tif"</span><span class="special">,</span> <span class="identifier">ios</span><span class="special">::</span><span class="identifier">binary</span> <span class="special">);</span>
150
151 <span class="identifier">rgb8_image_t</span> <span class="identifier">img</span><span class="special">;</span>
152 <span class="identifier">read_image</span><span class="special">(</span> <span class="identifier">in</span><span class="special">,</span> <span class="identifier">img</span><span class="special">,</span> <span class="identifier">tiff_tag</span><span class="special">()</span> <span class="special">);</span>
153
154 <span class="comment">// 2. Write image to in-memory buffer.</span>
155 <span class="identifier">stringstream</span> <span class="identifier">out_buffer</span><span class="special">(</span> <span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">out</span> <span class="special">|</span> <span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">binary</span> <span class="special">);</span>
156
157 <span class="identifier">rgb8_image_t</span> <span class="identifier">src</span><span class="special">;</span>
158 <span class="identifier">write_view</span><span class="special">(</span> <span class="identifier">out_buffer</span><span class="special">,</span> <span class="identifier">view</span><span class="special">(</span> <span class="identifier">src</span> <span class="special">),</span> <span class="identifier">tiff_tag</span><span class="special">()</span> <span class="special">);</span>
159
160 <span class="comment">// 3. Copy in-memory buffer to another.</span>
161 <span class="identifier">stringstream</span> <span class="identifier">in_buffer</span><span class="special">(</span> <span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">in</span> <span class="special">|</span> <span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">binary</span> <span class="special">);</span>
162 <span class="identifier">in_buffer</span> <span class="special">&lt;&lt;</span> <span class="identifier">out_buffer</span><span class="special">.</span><span class="identifier">rdbuf</span><span class="special">();</span>
163
164 <span class="comment">// 4. Read in-memory buffer to gil image</span>
165 <span class="identifier">rgb8_image_t</span> <span class="identifier">dst</span><span class="special">;</span>
166 <span class="identifier">read_image</span><span class="special">(</span> <span class="identifier">in_buffer</span><span class="special">,</span> <span class="identifier">dst</span><span class="special">,</span> <span class="identifier">tag_t</span><span class="special">()</span> <span class="special">);</span>
167
168 <span class="comment">// 5. Write out image.</span>
169 <span class="identifier">string</span> <span class="identifier">filename</span><span class="special">(</span> <span class="string">"out.tif"</span> <span class="special">);</span>
170 <span class="identifier">ofstream</span> <span class="identifier">out</span><span class="special">(</span> <span class="identifier">filename</span><span class="special">.</span><span class="identifier">c_str</span><span class="special">(),</span> <span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">binary</span> <span class="special">);</span>
171 <span class="identifier">write_view</span><span class="special">(</span> <span class="identifier">out</span><span class="special">,</span> <span class="identifier">view</span><span class="special">(</span> <span class="identifier">dst</span> <span class="special">),</span> <span class="identifier">tiff_tag</span><span class="special">()</span> <span class="special">);</span>
172 </pre>
173 <p>
174       In case the user is using his own stream classes he has to make sure it has
175       the common interface read, write, seek, close, etc. Interface.
176     </p>
177 </div>
178 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
179 <td align="left"></td>
180 <td align="right"><div class="copyright-footer">Copyright &#169; 2013 Christian Henning<p>
181         Distributed under the Boost Software License, Version 1.0. (See accompanying
182         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
183       </p>
184 </div></td>
185 </tr></table>
186 <hr>
187 <div class="spirit-nav">
188 <a accesskey="p" href="../../index.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../index.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="using_io.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
189 </div>
190 </body>
191 </html>