2 // Copyright 2013 Christian Henning
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
8 #define BOOST_TEST_MODULE pnm_test
10 #include <boost/gil.hpp>
11 #include <boost/gil/extension/io/pnm.hpp>
13 #include <boost/test/unit_test.hpp>
14 #include <boost/type_traits/is_same.hpp>
18 #include "mandel_view.hpp"
20 #include "subimage_test.hpp"
23 using namespace boost;
26 using tag_t = pnm_tag;
28 BOOST_AUTO_TEST_SUITE( gil_io_pnm_tests )
30 #ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
32 BOOST_AUTO_TEST_CASE( read_image_info_using_string )
35 using backend_t = get_reader_backend<std::string const, tag_t>::type;
37 backend_t backend = read_image_info( pnm_filename
41 BOOST_CHECK_EQUAL( backend._info._width , 256u );
42 BOOST_CHECK_EQUAL( backend._info._height, 256u );
46 ifstream in( pnm_filename.c_str(), ios::binary );
48 using backend_t = get_reader_backend<ifstream, tag_t>::type;
50 backend_t backend = read_image_info( in
54 BOOST_CHECK_EQUAL( backend._info._width , 256u );
55 BOOST_CHECK_EQUAL( backend._info._height, 256u );
59 FILE* file = fopen( pnm_filename.c_str(), "rb" );
61 using backend_t = get_reader_backend<FILE*, tag_t>::type;
63 backend_t backend = read_image_info( file
67 BOOST_CHECK_EQUAL( backend._info._width , 256u );
68 BOOST_CHECK_EQUAL( backend._info._height, 256u );
72 BOOST_AUTO_TEST_CASE( read_image_test )
76 read_image( pnm_filename, img, tag_t() );
78 BOOST_CHECK_EQUAL( img.width() , 256u );
79 BOOST_CHECK_EQUAL( img.height(), 256u );
83 ifstream in( pnm_filename.c_str(), ios::binary );
86 read_image( in, img, tag_t() );
88 BOOST_CHECK_EQUAL( img.width() , 256u );
89 BOOST_CHECK_EQUAL( img.height(), 256u );
93 FILE* file = fopen( pnm_filename.c_str(), "rb" );
96 read_image( file, img, tag_t() );
98 BOOST_CHECK_EQUAL( img.width() , 256u );
99 BOOST_CHECK_EQUAL( img.height(), 256u );
103 BOOST_AUTO_TEST_CASE( read_and_convert_image_test )
107 read_and_convert_image( pnm_filename, img, tag_t() );
109 BOOST_CHECK_EQUAL( img.width() , 256u );
110 BOOST_CHECK_EQUAL( img.height(), 256u );
114 ifstream in( pnm_filename.c_str(), ios::binary );
117 read_and_convert_image( in, img, tag_t() );
119 BOOST_CHECK_EQUAL( img.width() , 256u );
120 BOOST_CHECK_EQUAL( img.height(), 256u );
124 FILE* file = fopen( pnm_filename.c_str(), "rb" );
127 read_and_convert_image( file, img, tag_t() );
129 BOOST_CHECK_EQUAL( img.width() , 256u );
130 BOOST_CHECK_EQUAL( img.height(), 256u );
134 BOOST_AUTO_TEST_CASE( read_view_test )
137 rgb8_image_t img( 256, 256 );
138 read_view( pnm_filename, view( img ), tag_t() );
142 ifstream in( pnm_filename.c_str(), ios::binary );
144 rgb8_image_t img( 256, 256 );
145 read_view( in, view( img ), tag_t() );
149 FILE* file = fopen( pnm_filename.c_str(), "rb" );
151 rgb8_image_t img( 256, 256 );
152 read_view( file, view( img ), tag_t() );
156 BOOST_AUTO_TEST_CASE( read_and_convert_view_test )
159 rgb8_image_t img( 256, 256 );
160 read_and_convert_view( pnm_filename, view( img ), tag_t() );
164 ifstream in( pnm_filename.c_str(), ios::binary );
166 rgb8_image_t img( 256, 256 );
167 read_and_convert_view( in, view( img ), tag_t() );
171 FILE* file = fopen( pnm_filename.c_str(), "rb" );
173 rgb8_image_t img( 256, 256 );
175 read_and_convert_view( file
182 #endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
184 #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
186 BOOST_AUTO_TEST_CASE( write_view_test )
189 string filename( pnm_out + "write_test_string.pnm" );
192 , create_mandel_view( 320, 240
193 , rgb8_pixel_t( 0, 0, 255 )
194 , rgb8_pixel_t( 0, 255, 0 )
201 string filename( pnm_out + "write_test_ofstream.pnm" );
203 ofstream out( filename.c_str(), ios::out | ios::binary );
206 , create_mandel_view( 320, 240
207 , rgb8_pixel_t( 0, 0, 255 )
208 , rgb8_pixel_t( 0, 255, 0 )
215 string filename( pnm_out + "write_test_file.pnm" );
217 FILE* file = fopen( filename.c_str(), "wb" );
220 , create_mandel_view( 320, 240
221 , rgb8_pixel_t( 0, 0, 255 )
222 , rgb8_pixel_t( 0, 255, 0 )
229 string filename( pnm_out + "write_test_info.pnm" );
230 FILE* file = fopen( filename.c_str(), "wb" );
232 image_write_info< tag_t > info;
235 , create_mandel_view( 320, 240
236 , rgb8_pixel_t( 0, 0, 255 )
237 , rgb8_pixel_t( 0, 255, 0 )
243 #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
245 #ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
247 BOOST_AUTO_TEST_CASE( stream_test )
250 ifstream in( pnm_filename.c_str(), ios::binary );
253 read_image( in, img, tag_t() );
255 // 2. Write image to in-memory buffer.
256 stringstream out_buffer( ios_base::in | ios_base::out | ios_base::binary );
257 write_view( out_buffer, view( img ), tag_t() );
259 // 3. Copy in-memory buffer to another.
260 stringstream in_buffer( ios_base::in | ios_base::out | ios_base::binary );
261 in_buffer << out_buffer.rdbuf();
263 // 4. Read in-memory buffer to gil image
265 read_image( in_buffer, dst, tag_t() );
267 // 5. Write out image.
268 string filename( pnm_out + "stream_test.pnm" );
269 ofstream out( filename.c_str(), ios_base::binary );
270 #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
271 write_view( out, view( dst ), tag_t() );
272 #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
275 BOOST_AUTO_TEST_CASE( stream_test_2 )
278 if( !in_buf.open( pnm_filename.c_str(), ios::in | ios::binary ) )
280 BOOST_CHECK( false );
283 istream in( &in_buf );
286 read_image( in, img, tag_t() );
289 BOOST_AUTO_TEST_CASE( subimage_test )
291 run_subimage_test< rgb8_image_t, tag_t >( pnm_filename
296 run_subimage_test< rgb8_image_t, tag_t >( pnm_filename
297 , point_t( 103, 103 )
302 BOOST_AUTO_TEST_CASE( dynamic_image_test )
304 using my_img_types = mpl::vector
312 any_image< my_img_types > runtime_image;
314 read_image( pnm_filename.c_str()
319 #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
320 write_view( pnm_out + "dynamic_image_test.pnm"
321 , view( runtime_image )
324 #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
327 #endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
329 BOOST_AUTO_TEST_SUITE_END()