1 //
2 // Copyright 2013 Christian Henning
3 //
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
7 //
8 #include <boost/gil.hpp>
9 #include <boost/gil/extension/io/pnm.hpp>
10
11 #include <boost/core/lightweight_test.hpp>
12
13 #include <string>
14
15 #include "paths.hpp"
16 #include "scanline_read_test.hpp"
17
18 namespace gil = boost::gil;
19
20 template <typename Image>
write(Image & img,std::string const & file_name)21 void write(Image& img, std::string const& file_name)
22 {
23 #ifdef BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
24 gil::write_view(pnm_out + file_name, gil::view(img), gil::pnm_tag());
25 #endif // BOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES
26 }
27
28 template <typename Image>
test_pnm_scanline_reader(std::string filename)29 void test_pnm_scanline_reader(std::string filename)
30 {
31 test_scanline_reader<Image, gil::pnm_tag>(std::string(pnm_in + filename).c_str());
32 }
33
34 #ifdef BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
test_read_header()35 void test_read_header()
36 {
37 using backend_t = gil::get_reader_backend<std::string const, gil::pnm_tag>::type;
38 backend_t backend = gil::read_image_info(pnm_filename, gil::pnm_tag());
39
40 BOOST_TEST_EQ(backend._info._type, gil::pnm_image_type::color_bin_t::value);
41 BOOST_TEST_EQ(backend._info._width, 256u);
42 BOOST_TEST_EQ(backend._info._height, 256u);
43 BOOST_TEST_EQ(backend._info._max_value, 255u);
44 }
45
46 #ifdef BOOST_GIL_IO_USE_PNM_TEST_SUITE_IMAGES
test_read_reference_images()47 void test_read_reference_images()
48 {
49 // p1.pnm
50 {
51 gil::gray8_image_t img;
52 gil::read_image(pnm_in + "p1.pnm", img, gil::pnm_tag());
53 BOOST_TEST_EQ(view(img).width(), 200u);
54 BOOST_TEST_EQ(view(img).height(), 200u);
55
56 write(img, "p1.pnm");
57 test_pnm_scanline_reader<gil::gray8_image_t>("p1.pnm");
58 }
59 // p2.pnm
60 {
61 gil::gray8_image_t img;
62 gil::read_image(pnm_in + "p2.pnm", img, gil::pnm_tag());
63 BOOST_TEST_EQ(view(img).width(), 200u);
64 BOOST_TEST_EQ(view(img).height(), 200u);
65
66 write(img, "p2.pnm");
67 test_pnm_scanline_reader<gil::gray8_image_t>("p2.pnm");
68 }
69 // p3.pnm
70 {
71 gil::rgb8_image_t img;
72 gil::read_image(pnm_in + "p3.pnm", img, gil::pnm_tag());
73 BOOST_TEST_EQ(view(img).width(), 256u);
74 BOOST_TEST_EQ(view(img).height(), 256u);
75
76 write(img, "p3.pnm");
77 test_pnm_scanline_reader<rgb8_image_t>("p3.pnm");
78 }
79 // p4.pnm
80 {
81 gil::gray1_image_t img;
82 gil::read_image(pnm_in + "p4.pnm", img, gil::pnm_tag());
83 BOOST_TEST_EQ(view(img).width(), 200u);
84 BOOST_TEST_EQ(view(img).height(), 200u);
85
86 write(img, "p4.pnm");
87 test_pnm_scanline_reader<gil::gray1_image_t>("p4.pnm");
88 }
89 // p5.pnm
90 {
91 gil::gray8_image_t img;
92 gil::read_image(pnm_in + "p5.pnm", img, gil::pnm_tag());
93 BOOST_TEST_EQ(view(img).width(), 200u);
94 BOOST_TEST_EQ(view(img).height(), 200u);
95
96 write(img, "p5.pnm");
97 test_pnm_scanline_reader<gil::gray8_image_t>("p5.pnm");
98 }
99 // p6.pnm
100 {
101 gil::rgb8_image_t img;
102 gil::read_image(pnm_in + "p6.pnm", img, gil::pnm_tag());
103 BOOST_TEST_EQ(view(img).width(), 256u);
104 BOOST_TEST_EQ(view(img).height(), 256u);
105
106 write(img, "p6.pnm");
107 test_pnm_scanline_reader<gil::rgb8_image_t>("p6.pnm");
108 }
109 }
110 #endif // BOOST_GIL_IO_USE_PNM_TEST_SUITE_IMAGES
111
main()112 int main()
113 {
114 test_read_header();
115
116 #ifdef BOOST_GIL_IO_USE_PNM_TEST_SUITE_IMAGES
117 test_read_reference_images();
118 #endif
119
120 return boost::report_errors();
121 }
122 #else
main()123 int main() {}
124 #endif // BOOST_GIL_IO_TEST_ALLOW_READING_IMAGES
125