1 /*
2     Copyright 2005-2007 Adobe Systems Incorporated
3 
4     Use, modification and distribution are subject to the Boost Software License,
5     Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6     http://www.boost.org/LICENSE_1_0.txt).
7 
8     See http://opensource.adobe.com/gil for most recent version including documentation.
9 */
10 
11 #include <boost/mpl/vector.hpp>
12 #include <boost/gil/typedefs.hpp>
13 #include <boost/gil/extension/dynamic_image/any_image.hpp>
14 #include <boost/gil/image_view.hpp>
15 #include <boost/gil/planar_pixel_reference.hpp>
16 #include <boost/gil/color_convert.hpp>
17 #include <boost/gil/typedefs.hpp>
18 #include <boost/gil/image_view_factory.hpp>
19 #ifndef BOOST_GIL_NO_IO
20 #include <boost/gil/extension/io/tiff_io.hpp>
21 #include <boost/gil/extension/io/jpeg_io.hpp>
22 #include <boost/gil/extension/io/png_io.hpp>
23 #include <boost/gil/extension/io/tiff_dynamic_io.hpp>
24 #include <boost/gil/extension/io/jpeg_dynamic_io.hpp>
25 #include <boost/gil/extension/io/png_dynamic_io.hpp>
26 #endif
27 
28 using namespace boost::gil;
29 
30 typedef any_image<boost::mpl::vector<gray8_image_t, bgr8_image_t, argb8_image_t,
31                                      rgb8_image_t, rgb8_planar_image_t,
32                                      cmyk8_image_t, cmyk8_planar_image_t,
33                                      rgba8_image_t, rgba8_planar_image_t> > any_image_t;
34 
35 #ifdef BOOST_GIL_NO_IO
test_image_io()36 void test_image_io() {} // IO is not tested when BOOST_GIL_NO_IO is enabled
37 #else
test_image_io()38 void test_image_io() {
39     const std::string in_dir="";  // directory of source images
40     const std::string out_dir=in_dir+"image_io-out\\";
41 // ***********************************
42 // ************************ GRAY IMAGE
43 // ***********************************
44     gray8_image_t imgGray;
45 // TIFF
46     // load gray tiff into gray image
47     tiff_read_image(in_dir+"gray.tif",imgGray);
48     // save gray image to tiff
49     tiff_write_view(out_dir+"grayFromGray.tif",view(imgGray));
50 
51     // load RGB tiff into gray image
52     tiff_read_and_convert_image(in_dir+"RGB.tif",imgGray);
53 
54     // save gray image to tiff (again!)
55     tiff_write_view(out_dir+"grayFromRGB.tif",view(imgGray));
56 
57 // JPEG
58     // load gray jpeg into gray image
59     jpeg_read_image(in_dir+"gray.jpg",imgGray);
60     // save gray image to gray jpeg
61     jpeg_write_view(out_dir+"grayFromGray.jpg",view(imgGray));
62 
63     // load RGB jpeg into gray image
64     jpeg_read_and_convert_image(in_dir+"RGB.jpg",imgGray);
65     // save gray image to RGB jpeg
66     jpeg_write_view(out_dir+"grayFromRGB.jpg",color_converted_view<rgb8_pixel_t>(view(imgGray)));
67 
68 // PNG
69     // load gray png into gray image
70     png_read_image(in_dir+"gray.png",imgGray);
71     // save gray image to gray png
72     png_write_view(out_dir+"grayFromGray.png",view(imgGray));
73 
74     // load RGB png into gray image
75     png_read_and_convert_image(in_dir+"RGB.png",imgGray);
76     // save gray image to RGB png
77     png_write_view(out_dir+"grayFromRGB.png",color_converted_view<rgb8_pixel_t>(view(imgGray)));
78 
79 // ***********************************
80 // ************************* RGB Planar
81 // ***********************************
82 
83     rgb8_image_t imgRGB;
84 
85 // TIFF
86 
87     // load gray tiff into RGB image
88     tiff_read_and_convert_image(in_dir+"gray.tif",imgRGB);
89     // save RGB image to tiff
90     tiff_write_view(out_dir+"RGBFromGray.tif",view(imgRGB));
91 
92     // load RGB tiff into RGB image
93     tiff_read_image(in_dir+"RGB.tif",imgRGB);
94     // save RGB image to tiff (again!)
95     tiff_write_view(out_dir+"RGBFromRGB.tif",view(imgRGB));
96 
97 // JPEG
98     // load gray jpeg into RGB image
99     jpeg_read_and_convert_image(in_dir+"gray.jpg",imgRGB);
100     // save RGB image to gray jpeg
101     jpeg_write_view(out_dir+"RGBFromGray.jpg",view(imgRGB));
102 
103     // load RGB jpeg into RGB image
104     jpeg_read_image(in_dir+"RGB.jpg",imgRGB);
105     // save RGB image to RGB jpeg
106     jpeg_write_view(out_dir+"RGBFromRGB.jpg",view(imgRGB));
107 
108 // PNG
109     // load gray png into RGB image
110     png_read_and_convert_image(in_dir+"gray.png",imgRGB);
111     // save RGB image to gray png
112     png_write_view(out_dir+"RGBFromGray.png",view(imgRGB));
113 
114     // load RGB png into RGB image
115     png_read_image(in_dir+"RGB.png",imgRGB);
116     // save RGB image to RGB png
117     png_write_view(out_dir+"RGBFromRGB.png",view(imgRGB));
118 
119 // ***********************************
120 // ************************ GRAY32 Planar
121 // ***********************************
122     gray32f_image_t imgGray32;
123 // TIFF
124     // load gray tiff into gray image
125     tiff_read_and_convert_image(in_dir+"gray.tif",imgGray32);
126     // save gray image to tiff
127     tiff_write_view(out_dir+"gray32FromGray.tif",view(imgGray32));
128 
129     // load RGB tiff into gray image
130     tiff_read_and_convert_image(in_dir+"RGB.tif",imgGray32);
131 
132     // save gray image to tiff (again!)
133     tiff_write_view(out_dir+"gray32FromRGB.tif",view(imgGray32));
134 
135 // JPEG
136     tiff_read_and_convert_image(in_dir+"gray.tif",imgGray32);    // again TIF (jpeg load not supported)
137     // save RGB image to gray jpeg
138     tiff_write_view(out_dir+"gray32FromGray.jpg",view(imgGray32));
139 
140     // load RGB jpeg into RGB image
141     tiff_read_and_convert_image(in_dir+"RGB.tif",imgGray32);    // again TIF (jpeg load not supported)
142     // save RGB image to RGB jpeg
143     tiff_write_view(out_dir+"gray32FromRGB.jpg",color_converted_view<rgb32f_pixel_t>(view(imgGray32)));
144 
145 // ***********************************
146 // ************************ NATIVE Planar
147 // ***********************************
148     any_image_t anyImg;
149 
150 // TIFF
151     // load RGB tiff into any image
152     tiff_read_image(in_dir+"RGB.tif",anyImg);
153 
154     // save any image to tiff
155     tiff_write_view(out_dir+"RGBNative.tif",view(anyImg));
156 
157     // load gray tiff into any image
158     tiff_read_image(in_dir+"gray.tif",anyImg);
159 
160     // save any image to tiff
161     tiff_write_view(out_dir+"grayNative.tif",view(anyImg));
162 
163 // JPEG
164     // load gray jpeg into any image
165     jpeg_read_image(in_dir+"gray.jpg",anyImg);
166     // save any image to jpeg
167     jpeg_write_view(out_dir+"grayNative.jpg",view(anyImg));
168 
169     // load RGB jpeg into any image
170     jpeg_read_image(in_dir+"RGB.jpg",anyImg);
171     // save any image to jpeg
172     jpeg_write_view(out_dir+"RGBNative.jpg",view(anyImg));
173 
174 // PNG
175     // load gray png into any image
176     png_read_image(in_dir+"gray.png",anyImg);
177     // save any image to png
178     png_write_view(out_dir+"grayNative.png",view(anyImg));
179 
180     // load RGB png into any image
181     png_read_image(in_dir+"RGB.png",anyImg);
182     // save any image to png
183     png_write_view(out_dir+"RGBNative.png",view(anyImg));
184 }
185 #endif
186 
main(int argc,char * argv[])187 int main(int argc, char* argv[]) {
188     test_image_io();
189     return 0;
190 }
191 
192