• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
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 #ifndef BOOST_GIL_TEST_CORE_IMAGE_TEST_FIXTURE_HPP
9 #define BOOST_GIL_TEST_CORE_IMAGE_TEST_FIXTURE_HPP
10 
11 #include <boost/gil.hpp>
12 #include <boost/assert.hpp>
13 
14 #include <cstdint>
15 #include <initializer_list>
16 #include <limits>
17 #include <random>
18 #include <tuple>
19 #include <type_traits>
20 
21 #include "core/test_fixture.hpp"
22 
23 namespace boost { namespace gil { namespace test { namespace fixture {
24 
25 using image_types = std::tuple
26 <
27     gil::gray8_image_t,
28     gil::gray16_image_t,
29     gil::gray32_image_t,
30     gil::bgr8_image_t,
31     gil::bgr16_image_t,
32     gil::bgr32_image_t,
33     gil::rgb8_image_t,
34     gil::rgb16_image_t,
35     gil::rgb32_image_t,
36     gil::rgba8_image_t,
37     gil::rgba16_image_t,
38     gil::rgba32_image_t
39 >;
40 
41 using rgb_interleaved_image_types = std::tuple
42 <
43     gil::bgr8_image_t,
44     gil::bgr16_image_t,
45     gil::bgr32_image_t,
46     gil::rgb8_image_t,
47     gil::rgb16_image_t,
48     gil::rgb32_image_t,
49     gil::rgba8_image_t,
50     gil::rgba16_image_t,
51     gil::rgba32_image_t
52 >;
53 
54 template <typename Image, typename Generator>
generate_image(std::ptrdiff_t size_x,std::ptrdiff_t size_y,Generator && generate)55 auto generate_image(std::ptrdiff_t size_x, std::ptrdiff_t size_y, Generator&& generate) -> Image
56 {
57     using pixel_t = typename Image::value_type;
58 
59     Image out(size_x, size_y);
60     gil::for_each_pixel(view(out), [&generate](pixel_t& p) {
61         gil::static_generate(p, [&generate]() { return generate(); });
62     });
63 
64     return out;
65 }
66 
67 template <typename Image>
create_image(std::ptrdiff_t size_x,std::ptrdiff_t size_y,int channel_value)68 auto create_image(std::ptrdiff_t size_x, std::ptrdiff_t size_y, int channel_value) -> Image
69 {
70     using pixel_t = typename Image::value_type;
71     using channel_t = typename gil::channel_type<pixel_t>::type;
72     static_assert(std::is_integral<channel_t>::value, "channel must be integral type");
73 
74     Image out(size_x, size_y);
75     gil::for_each_pixel(view(out), [&channel_value](pixel_t& p) {
76         gil::static_fill(p, static_cast<channel_t>(channel_value));
77     });
78 
79     return out;
80 }
81 
82 }}}} // namespace boost::gil::test::fixture
83 
84 #endif
85