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> » <a class="el" href="g_i_l_0079.html">gil</a> » <a class="el" href="g_i_l_0078.html">extension</a> » <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 <typename Images> void tiff_read_image(const char*,any_image<Images>)</span>
<a name="l00025"></a>00025 <span class="comment">// template <typename Views> void tiff_write_view(const char*,any_image_view<Views>)</span>
<a name="l00026"></a>00026 <span class="comment">//</span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="preprocessor">#include <string></span>
<a name="l00029"></a>00029 <span class="preprocessor">#include <boost/mpl/bool.hpp></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><<span class="keyword">typename</span> View> <span class="keyword">struct </span>apply
<a name="l00041"></a>00041 : <span class="keyword">public</span> mpl::bool_<tiff_write_support<View>::is_supported> {};
<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> <<span class="keyword">typename</span> Views>
<a name="l00050"></a>00050 <span class="keywordtype">void</span> write_view(<span class="keyword">const</span> any_image_view<Views>& runtime_view) {
<a name="l00051"></a>00051 dynamic_io_fnobj<tiff_write_is_supported, tiff_writer> 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> <<span class="keyword">typename</span> Image>
<a name="l00063"></a>00063 <span class="keywordtype">bool</span> apply() {
<a name="l00064"></a>00064 <span class="keywordflow">return</span> tiff_read_support<typename Image::view_t>::bit_depth==_bit_depth &&
<a name="l00065"></a>00065 tiff_read_support<typename Image::view_t>::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><<span class="keyword">typename</span> View> <span class="keyword">struct </span>apply
<a name="l00071"></a>00071 : <span class="keyword">public</span> mpl::bool_<tiff_read_support<View>::is_supported> {};
<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> <<span class="keyword">typename</span> Images>
<a name="l00079"></a>00079 <span class="keywordtype">void</span> read_image(any_image<Images>& 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,&width);
<a name="l00083"></a>00083 TIFFGetField(_tp,TIFFTAG_IMAGELENGTH,&height);
<a name="l00084"></a>00084 TIFFGetField(_tp,TIFFTAG_BITSPERSAMPLE,&bps);
<a name="l00085"></a>00085 TIFFGetField(_tp,TIFFTAG_PHOTOMETRIC,&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<tiff_read_is_supported, tiff_reader> 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> <<span class="keyword">typename</span> Images>
<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<Images></a>& 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> <<span class="keyword">typename</span> Images>
<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& 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<Images></a>& 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> <<span class="keyword">typename</span> Views>
<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<Views></a>& 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> <<span class="keyword">typename</span> Views>
<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& 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<Views></a>& 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
<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>
|