• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2019-2020 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 #include <boost/gil.hpp>
9 #include <boost/gil/extension/dynamic_image/dynamic_image_all.hpp>
10 
11 #include <boost/core/lightweight_test.hpp>
12 
13 #include "test_fixture.hpp"
14 #include "test_utility_output_stream.hpp"
15 #include "core/image/test_fixture.hpp"
16 
17 namespace gil = boost::gil;
18 namespace fixture = boost::gil::test::fixture;
19 
20 struct test_subimage_equals_image
21 {
22     template <typename Image>
operator ()test_subimage_equals_image23     void operator()(Image const&)
24     {
25         using image_t = Image;
26         fixture::dynamic_image i0(fixture::create_image<image_t>(4, 4, 128));
27         auto const v0 = gil::const_view(i0);
28         BOOST_TEST_EQ(v0.dimensions().x, 4);
29         BOOST_TEST_EQ(v0.dimensions().y, 4);
30         BOOST_TEST_EQ(v0.size(), 4 * 4);
31 
32         // request with 2 x point_t values
33         {
34             auto v1 = gil::subimage_view(gil::view(i0), {0, 0}, i0.dimensions());
35             BOOST_TEST_EQ(v0.dimensions(), v1.dimensions());
36             BOOST_TEST_EQ(v0.size(), v1.size());
37             BOOST_TEST(gil::equal_pixels(v0, v1));
38         }
39         // request with 4 x dimension values
40         {
41             auto v1 = gil::subimage_view(gil::view(i0), 0, 0, i0.dimensions().x, i0.dimensions().y);
42             BOOST_TEST_EQ(v0.dimensions(), v1.dimensions());
43             BOOST_TEST_EQ(v0.size(), v1.size());
44             BOOST_TEST(gil::equal_pixels(v0, v1));
45         }
46     }
runtest_subimage_equals_image47     static void run()
48     {
49         boost::mp11::mp_for_each<fixture::image_types>(test_subimage_equals_image{});
50     }
51 };
52 
53 struct test_subimage_equals_image_quadrants
54 {
55     template <typename Image>
operator ()test_subimage_equals_image_quadrants56     void operator()(Image const&)
57     {
58         using image_t = Image;
59         fixture::dynamic_image i0(fixture::create_image<image_t>(4, 4, 0));
60         auto v0 = gil::view(i0);
61         // create test image and set values of pixels in:
62         //  quadrant 1
63         auto const i1 = fixture::create_image<image_t>(2, 2, 255);
64         gil::apply_operation(v0, fixture::fill_any_view<image_t>({2, 3, 6, 7}, gil::const_view(i1)[0]));
65         //  quadrant 2
66         auto const i2 = fixture::create_image<image_t>(2, 2, 128);
67         gil::apply_operation(v0, fixture::fill_any_view<image_t>({0, 1, 4, 5}, gil::const_view(i2)[0]));
68         //  quadrant 3
69         auto const i3 = fixture::create_image<image_t>(2, 2, 64);
70         gil::apply_operation(v0, fixture::fill_any_view<image_t>({8, 9, 12, 13}, gil::const_view(i3)[0]));
71         //  quadrant 4
72         auto const i4 = fixture::create_image<image_t>(2, 2, 32);
73         gil::apply_operation(v0, fixture::fill_any_view<image_t>({10, 11, 14, 15}, gil::const_view(i4)[0]));
74 
75         auto v1 = gil::subimage_view(gil::view(i0), { 2, 0 }, i0.dimensions() / 2);
76         BOOST_TEST(gil::equal_pixels(v1, gil::const_view(i1)));
77         auto v2 = gil::subimage_view(gil::view(i0), { 0, 0 }, i0.dimensions() / 2);
78         BOOST_TEST(gil::equal_pixels(v2, gil::const_view(i2)));
79         auto v3 = gil::subimage_view(gil::view(i0), { 0, 2 }, i0.dimensions() / 2);
80         BOOST_TEST(gil::equal_pixels(v3, gil::const_view(i3)));
81         auto v4 = gil::subimage_view(gil::view(i0), { 2, 2 }, i0.dimensions() / 2);
82         BOOST_TEST(gil::equal_pixels(v4, gil::const_view(i4)));
83     }
runtest_subimage_equals_image_quadrants84     static void run()
85     {
86         boost::mp11::mp_for_each<fixture::image_types>(test_subimage_equals_image_quadrants{});
87     }
88 };
89 
main()90 int main()
91 {
92     test_subimage_equals_image::run();
93     test_subimage_equals_image_quadrants::run();
94 
95     return ::boost::report_errors();
96 }
97