subimage_view.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. #include <boost/gil.hpp>
  9. #include <boost/gil/extension/dynamic_image/dynamic_image_all.hpp>
  10. #define BOOST_TEST_MODULE test_ext_dynamic_image_subimage_view
  11. #include "unit_test.hpp"
  12. #include "unit_test_utility.hpp"
  13. #include "test_fixture.hpp"
  14. #include "core/image/test_fixture.hpp"
  15. namespace gil = boost::gil;
  16. namespace fixture = boost::gil::test::fixture;
  17. BOOST_AUTO_TEST_SUITE(dynamic_image_subimage_view)
  18. BOOST_AUTO_TEST_CASE_TEMPLATE(subimage_equals_image, Image, fixture::image_types)
  19. {
  20. fixture::dynamic_image i0(fixture::create_image<Image>(4, 4, 128));
  21. auto const v0 = gil::const_view(i0);
  22. BOOST_TEST(v0.dimensions().x == 4);
  23. BOOST_TEST(v0.dimensions().y == 4);
  24. // request with 2 x point_t values
  25. {
  26. auto v1 = gil::subimage_view(gil::view(i0), {0, 0}, i0.dimensions());
  27. BOOST_TEST(v0.dimensions() == v1.dimensions());
  28. BOOST_TEST(gil::equal_pixels(v0, v1));
  29. }
  30. // request with 4 x dimension values
  31. {
  32. auto v1 = gil::subimage_view(gil::view(i0), 0, 0, i0.dimensions().x, i0.dimensions().y);
  33. BOOST_TEST(v0.dimensions() == v1.dimensions());
  34. BOOST_TEST(gil::equal_pixels(v0, v1));
  35. }
  36. }
  37. BOOST_AUTO_TEST_CASE_TEMPLATE(subimage_equals_image_quadrants, Image, fixture::image_types)
  38. {
  39. fixture::dynamic_image i0(fixture::create_image<Image>(4, 4, 0));
  40. auto v0 = gil::view(i0);
  41. // create test image and set values of pixels in:
  42. // quadrant 1
  43. auto const i1 = fixture::create_image<Image>(2, 2, 255);
  44. gil::apply_operation(v0, fixture::fill_any_view<Image>({2, 3, 6, 7}, gil::const_view(i1)[0]));
  45. // quadrant 2
  46. auto const i2 = fixture::create_image<Image>(2, 2, 128);
  47. gil::apply_operation(v0, fixture::fill_any_view<Image>({0, 1, 4, 5}, gil::const_view(i2)[0]));
  48. // quadrant 3
  49. auto const i3 = fixture::create_image<Image>(2, 2, 64);
  50. gil::apply_operation(v0, fixture::fill_any_view<Image>({8, 9, 12, 13}, gil::const_view(i3)[0]));
  51. // quadrant 4
  52. auto const i4 = fixture::create_image<Image>(2, 2, 32);
  53. gil::apply_operation(v0, fixture::fill_any_view<Image>({10, 11, 14, 15}, gil::const_view(i4)[0]));
  54. auto v1 = gil::subimage_view(gil::view(i0), { 2, 0 }, i0.dimensions() / 2);
  55. BOOST_TEST(gil::equal_pixels(v1, gil::const_view(i1)));
  56. auto v2 = gil::subimage_view(gil::view(i0), { 0, 0 }, i0.dimensions() / 2);
  57. BOOST_TEST(gil::equal_pixels(v2, gil::const_view(i2)));
  58. auto v3 = gil::subimage_view(gil::view(i0), { 0, 2 }, i0.dimensions() / 2);
  59. BOOST_TEST(gil::equal_pixels(v3, gil::const_view(i3)));
  60. auto v4 = gil::subimage_view(gil::view(i0), { 2, 2 }, i0.dimensions() / 2);
  61. BOOST_TEST(gil::equal_pixels(v4, gil::const_view(i4)));
  62. }
  63. BOOST_AUTO_TEST_SUITE_END()