static_transform.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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/color_base.hpp>
  9. #include <boost/gil/pixel.hpp>
  10. #include <boost/gil/typedefs.hpp>
  11. #include <type_traits>
  12. #define BOOST_TEST_MODULE test_color_base_static_transform
  13. #include "unit_test.hpp"
  14. namespace gil = boost::gil;
  15. BOOST_AUTO_TEST_CASE(single_source_gray8_to_gray8)
  16. {
  17. gil::gray8_pixel_t src{128};
  18. gil::gray8_pixel_t dst{0};
  19. gil::static_transform(src, dst, [](std::uint8_t src_channel) {
  20. return src_channel; // copy
  21. });
  22. BOOST_TEST(gil::at_c<0>(src) == gil::at_c<0>(dst));
  23. }
  24. BOOST_AUTO_TEST_CASE(single_source_rgb8_to_rgb8)
  25. {
  26. gil::rgb8_pixel_t src{32, 64, 128};
  27. gil::rgb8_pixel_t dst{0, 0, 0};
  28. gil::static_transform(src, dst, [](std::uint8_t src_channel) {
  29. return src_channel; // copy
  30. });
  31. BOOST_TEST(gil::at_c<0>(src) == gil::at_c<0>(dst));
  32. BOOST_TEST(gil::at_c<1>(src) == gil::at_c<1>(dst));
  33. BOOST_TEST(gil::at_c<2>(src) == gil::at_c<2>(dst));
  34. }
  35. BOOST_AUTO_TEST_CASE(single_source_rgb8_to_gray8)
  36. {
  37. // Transformation of wider space to narrower space is a valid operation
  38. gil::rgb8_pixel_t src{32,64, 128};
  39. gil::gray8_pixel_t dst{0};
  40. gil::static_transform(src, dst, [](std::uint8_t src_channel) {
  41. return src_channel; // copy
  42. });
  43. BOOST_TEST(gil::at_c<0>(dst) == std::uint8_t{32});
  44. }
  45. BOOST_AUTO_TEST_CASE(single_source_cmyk8_to_rgb8)
  46. {
  47. // Transformation of wider space to narrower space is a valid operation
  48. gil::cmyk8_pixel_t src{16, 32, 64, 128};
  49. gil::rgb8_pixel_t dst{0, 0, 0};
  50. gil::static_transform(src, dst, [](std::uint8_t src_channel) {
  51. return src_channel; // copy
  52. });
  53. BOOST_TEST(gil::at_c<0>(dst) == std::uint8_t{16});
  54. BOOST_TEST(gil::at_c<1>(dst) == std::uint8_t{32});
  55. BOOST_TEST(gil::at_c<2>(dst) == std::uint8_t{64});
  56. }