File: g_i_l_0638.html

package info (click to toggle)
boost1.55 1.55.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 487,824 kB
  • ctags: 673,349
  • sloc: cpp: 2,098,430; xml: 106,036; ansic: 46,744; python: 32,427; sh: 11,864; cs: 2,121; asm: 1,640; makefile: 984; perl: 714; yacc: 456; php: 132; fortran: 43; sql: 13; csh: 6
file content (162 lines) | stat: -rw-r--r-- 15,333 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<!-- Copyright 2008 Lubomir Bourdev and Hailin Jin

     Distributed under the Boost Software License, Version 1.0.
     (See accompanying file LICENSE_1_0.txt or copy at
     http://www.boost.org/LICENSE_1_0.txt)
  -->

<!--
    Copyright 2005-2007 Adobe Systems Incorporated
    Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
    or a copy at http://stlab.adobe.com/licenses.html)

    Some files are held under additional license.
    Please see "http://stlab.adobe.com/licenses.html" for more information.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>
    <TITLE>Generic Image Library: tiff_dynamic_io.hpp Source File</TITLE>
    <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ISO-8859-1"/>
    <LINK TYPE="text/css" REL="stylesheet" HREF="adobe_source.css"/>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" style='width: 100%; margin: 0; padding: 0'><tr>
<td width="100%" valign="top" style='padding-left: 10px; padding-right: 10px; padding-bottom: 10px'>
<div class="qindex"><a class="qindex" href="index.html">Modules</a> 
                  | <a class="qindex" href="classes.html">Alphabetical List</a> 
                  | <a class="qindex" href="annotated.html">Class List</a> 
                  | <a class="qindex" href="dirs.html">Directories</a> 
                  | <a class="qindex" href="files.html">File List</a> 
                  | <a class="qindex" href="../index.html">GIL Home Page</a> 
</div>
<!-- End Header -->
<!-- Generated by Doxygen 1.5.6 -->
  <div class="navpath"><a class="el" href="g_i_l_0076.html">boost</a>&nbsp;&raquo&nbsp;<a class="el" href="g_i_l_0079.html">gil</a>&nbsp;&raquo&nbsp;<a class="el" href="g_i_l_0078.html">extension</a>&nbsp;&raquo&nbsp;<a class="el" href="g_i_l_0077.html">io</a>
  </div>
<div class="contents">
<h1>tiff_dynamic_io.hpp</h1><a href="g_i_l_0639.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2007 Adobe Systems Incorporated</span>
<a name="l00003"></a>00003 <span class="comment">   </span>
<a name="l00004"></a>00004 <span class="comment">    Use, modification and distribution are subject to the Boost Software License,</span>
<a name="l00005"></a>00005 <span class="comment">    Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at</span>
<a name="l00006"></a>00006 <span class="comment">    http://www.boost.org/LICENSE_1_0.txt).</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">    See http://opensource.adobe.com/gil for most recent version including documentation.</span>
<a name="l00009"></a>00009 <span class="comment">*/</span>
<a name="l00010"></a>00010 
<a name="l00011"></a>00011 <span class="comment">/*************************************************************************************************/</span>
<a name="l00012"></a>00012 
<a name="l00013"></a>00013 <span class="preprocessor">#ifndef GIL_TIFF_DYNAMIC_IO_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define GIL_TIFF_DYNAMIC_IO_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00022"></a>00022 <span class="comment">//</span>
<a name="l00023"></a>00023 <span class="comment">// We are currently providing the following functions:</span>
<a name="l00024"></a>00024 <span class="comment">// template &lt;typename Images&gt; void tiff_read_image(const char*,any_image&lt;Images&gt;)</span>
<a name="l00025"></a>00025 <span class="comment">// template &lt;typename Views&gt; void tiff_write_view(const char*,any_image_view&lt;Views&gt;)</span>
<a name="l00026"></a>00026 <span class="comment">//</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;string&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;boost/mpl/bool.hpp&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "../dynamic_image/dynamic_image_all.hpp"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="io__error_8hpp.html" title="Handle input-output errors.">io_error.hpp</a>"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="tiff__io_8hpp.html" title="Support for reading and writing TIFF files Requires libtiff!">tiff_io.hpp</a>"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="g_i_l_0085.html" title="Generic io functions for dealing with dynamic images.">dynamic_io.hpp</a>"</span>
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="keyword">namespace </span>boost { <span class="keyword">namespace </span>gil {
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="keyword">namespace </span>detail {
<a name="l00038"></a>00038 
<a name="l00039"></a>00039 <span class="keyword">struct </span>tiff_write_is_supported {
<a name="l00040"></a>00040     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> View&gt; <span class="keyword">struct </span>apply
<a name="l00041"></a>00041         : <span class="keyword">public</span> mpl::bool_&lt;tiff_write_support&lt;View&gt;::is_supported&gt; {};
<a name="l00042"></a>00042 };
<a name="l00043"></a>00043 
<a name="l00044"></a>00044 <span class="keyword">class </span>tiff_writer_dynamic : <span class="keyword">public</span> tiff_writer {
<a name="l00045"></a>00045 <span class="keyword">public</span>:
<a name="l00046"></a>00046     <span class="keyword">typedef</span> <span class="keywordtype">void</span> result_type;
<a name="l00047"></a>00047     tiff_writer_dynamic(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename) : tiff_writer(filename) {}
<a name="l00048"></a>00048 
<a name="l00049"></a>00049     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Views&gt;
<a name="l00050"></a>00050     <span class="keywordtype">void</span> write_view(<span class="keyword">const</span> any_image_view&lt;Views&gt;&amp; runtime_view) {
<a name="l00051"></a>00051         dynamic_io_fnobj&lt;tiff_write_is_supported, tiff_writer&gt; op(<span class="keyword">this</span>);
<a name="l00052"></a>00052         <a class="code" href="group___variant.html#g3dc0a90911c08815be11e1e49ec06037" title="Invokes a generic constant operation (represented as a binary function object) on...">apply_operation</a>(runtime_view,op);
<a name="l00053"></a>00053     }
<a name="l00054"></a>00054 };
<a name="l00055"></a>00055 
<a name="l00056"></a>00056 <span class="keyword">class </span>tiff_type_format_checker {
<a name="l00057"></a>00057     <span class="keywordtype">int</span> _bit_depth;
<a name="l00058"></a>00058     <span class="keywordtype">int</span> _color_type;
<a name="l00059"></a>00059 <span class="keyword">public</span>:
<a name="l00060"></a>00060     tiff_type_format_checker(<span class="keywordtype">int</span> bit_depth_in,<span class="keywordtype">int</span> color_type_in) :
<a name="l00061"></a>00061         _bit_depth(bit_depth_in),_color_type(color_type_in) {}
<a name="l00062"></a>00062     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Image&gt;
<a name="l00063"></a>00063     <span class="keywordtype">bool</span> apply() {
<a name="l00064"></a>00064         <span class="keywordflow">return</span> tiff_read_support&lt;typename Image::view_t&gt;::bit_depth==_bit_depth &amp;&amp;
<a name="l00065"></a>00065                tiff_read_support&lt;typename Image::view_t&gt;::color_type==_color_type;
<a name="l00066"></a>00066     }
<a name="l00067"></a>00067 };
<a name="l00068"></a>00068 
<a name="l00069"></a>00069 <span class="keyword">struct </span>tiff_read_is_supported {
<a name="l00070"></a>00070     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> View&gt; <span class="keyword">struct </span>apply
<a name="l00071"></a>00071         : <span class="keyword">public</span> mpl::bool_&lt;tiff_read_support&lt;View&gt;::is_supported&gt; {};
<a name="l00072"></a>00072 };
<a name="l00073"></a>00073 
<a name="l00074"></a>00074 <span class="keyword">class </span>tiff_reader_dynamic : <span class="keyword">public</span> tiff_reader {
<a name="l00075"></a>00075 <span class="keyword">public</span>:
<a name="l00076"></a>00076     tiff_reader_dynamic(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename) : tiff_reader(filename) {}
<a name="l00077"></a>00077 
<a name="l00078"></a>00078     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Images&gt;
<a name="l00079"></a>00079     <span class="keywordtype">void</span> read_image(any_image&lt;Images&gt;&amp; im) {
<a name="l00080"></a>00080         <span class="keywordtype">int</span> width,height;
<a name="l00081"></a>00081         <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> bps,photometric;
<a name="l00082"></a>00082         TIFFGetField(_tp,TIFFTAG_IMAGEWIDTH,&amp;width);
<a name="l00083"></a>00083         TIFFGetField(_tp,TIFFTAG_IMAGELENGTH,&amp;height);
<a name="l00084"></a>00084         TIFFGetField(_tp,TIFFTAG_BITSPERSAMPLE,&amp;bps);
<a name="l00085"></a>00085         TIFFGetField(_tp,TIFFTAG_PHOTOMETRIC,&amp;photometric);
<a name="l00086"></a>00086         <span class="keywordflow">if</span> (!construct_matched(im,tiff_type_format_checker(bps,photometric))) {
<a name="l00087"></a>00087             io_error(<span class="stringliteral">"tiff_reader_dynamic::read_image(): no matching image type between those of the given any_image and that of the file"</span>);
<a name="l00088"></a>00088         } <span class="keywordflow">else</span> {
<a name="l00089"></a>00089             im.recreate(width,height);
<a name="l00090"></a>00090             dynamic_io_fnobj&lt;tiff_read_is_supported, tiff_reader&gt; op(<span class="keyword">this</span>);
<a name="l00091"></a>00091             <a class="code" href="group___variant.html#g3dc0a90911c08815be11e1e49ec06037" title="Invokes a generic constant operation (represented as a binary function object) on...">apply_operation</a>(<a class="code" href="g_i_l_0135.html#g55e45a15dddfc0d870c2f7fb9739cb2e" title="Returns the non-constant-pixel view of any image. The returned view is any view.">view</a>(im),op);
<a name="l00092"></a>00092         }
<a name="l00093"></a>00093     }
<a name="l00094"></a>00094 };
<a name="l00095"></a>00095 
<a name="l00096"></a>00096 } <span class="comment">// namespace detail</span>
<a name="l00097"></a>00097 
<a name="l00103"></a>00103 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Images&gt;
<a name="l00104"></a><a class="code" href="g_i_l_0216.html#g6668f0775908d834ab5fdf0cb2e41e34">00104</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="g_i_l_0216.html#g14ff6b4a743878cac2b32fdaedd5e705" title="Allocates a new image whose dimensions are determined by the given tiff image file...">tiff_read_image</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename,<a class="code" href="g_i_l_0018.html" title="Represents a run-time specified image. Note it does NOT model ImageConcept.">any_image&lt;Images&gt;</a>&amp; im) {
<a name="l00105"></a>00105     detail::tiff_reader_dynamic m(filename);
<a name="l00106"></a>00106     m.read_image(im);
<a name="l00107"></a>00107 }
<a name="l00108"></a>00108 
<a name="l00111"></a>00111 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Images&gt;
<a name="l00112"></a><a class="code" href="g_i_l_0216.html#gd98fe891bca440cb0e68a08aaa9e4574">00112</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="g_i_l_0216.html#g14ff6b4a743878cac2b32fdaedd5e705" title="Allocates a new image whose dimensions are determined by the given tiff image file...">tiff_read_image</a>(<span class="keyword">const</span> std::string&amp; filename,<a class="code" href="g_i_l_0018.html" title="Represents a run-time specified image. Note it does NOT model ImageConcept.">any_image&lt;Images&gt;</a>&amp; im) {
<a name="l00113"></a>00113     <a class="code" href="g_i_l_0216.html#g14ff6b4a743878cac2b32fdaedd5e705" title="Allocates a new image whose dimensions are determined by the given tiff image file...">tiff_read_image</a>(filename.c_str(),im);
<a name="l00114"></a>00114 }
<a name="l00115"></a>00115 
<a name="l00120"></a>00120 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Views&gt;
<a name="l00121"></a><a class="code" href="g_i_l_0216.html#g512a713ae6fc8aa9da4415a1f554a67e">00121</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="g_i_l_0216.html#g99ce921bc92a5bbcf2145d3387e5e323" title="Saves the view to a tiff file specified by the given tiff image file name.">tiff_write_view</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename,<span class="keyword">const</span> <a class="code" href="g_i_l_0020.html" title="Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCo...">any_image_view&lt;Views&gt;</a>&amp; runtime_view) {
<a name="l00122"></a>00122     detail::tiff_writer_dynamic m(filename);
<a name="l00123"></a>00123     m.write_view(runtime_view);
<a name="l00124"></a>00124 }
<a name="l00125"></a>00125 
<a name="l00128"></a>00128 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Views&gt;
<a name="l00129"></a><a class="code" href="g_i_l_0216.html#g718fc306c4dba31246989bb6255dd3fb">00129</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="g_i_l_0216.html#g99ce921bc92a5bbcf2145d3387e5e323" title="Saves the view to a tiff file specified by the given tiff image file name.">tiff_write_view</a>(<span class="keyword">const</span> std::string&amp; filename,<span class="keyword">const</span> <a class="code" href="g_i_l_0020.html" title="Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCo...">any_image_view&lt;Views&gt;</a>&amp; runtime_view) {
<a name="l00130"></a>00130     <a class="code" href="g_i_l_0216.html#g99ce921bc92a5bbcf2145d3387e5e323" title="Saves the view to a tiff file specified by the given tiff image file name.">tiff_write_view</a>(filename.c_str(),runtime_view);
<a name="l00131"></a>00131 }
<a name="l00132"></a>00132 
<a name="l00133"></a>00133 } }  <span class="comment">// namespace boost::gil</span>
<a name="l00134"></a>00134 
<a name="l00135"></a>00135 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat May 2 13:50:15 2009 for Generic Image Library by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>