2 // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
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
8 #include <boost/gil/pixel.hpp>
9 #include <boost/gil/concepts/pixel.hpp>
10 #include <boost/gil/typedefs.hpp>
12 #include <boost/mp11.hpp>
14 namespace gil = boost::gil;
15 using namespace boost::mp11;
17 template <std::size_t NumChannels>
18 struct assert_num_channels
20 template <typename Pixel>
21 void operator()(Pixel&&)
24 gil::num_channels<Pixel>::value == NumChannels,
25 "pixels does not have expected number of channels");
27 // TODO: Verify num_channels type with std::is_same
28 // e.g. is std::integral_constant<T, ...>
32 template <std::size_t NumChannels, typename... Pixels>
35 mp_for_each<Pixels...>(assert_num_channels<NumChannels>());
50 gil::gray16sc_pixel_t,
55 gil::gray32fc_pixel_t,
101 gil::abgr16c_pixel_t,
102 gil::abgr16s_pixel_t,
103 gil::abgr16sc_pixel_t,
105 gil::abgr32c_pixel_t,
106 gil::abgr32f_pixel_t,
107 gil::abgr32fc_pixel_t,
108 gil::abgr32s_pixel_t,
109 gil::abgr32sc_pixel_t,
113 gil::bgra8sc_pixel_t,
115 gil::bgra16c_pixel_t,
116 gil::bgra16s_pixel_t,
117 gil::bgra16sc_pixel_t,
119 gil::bgra32c_pixel_t,
120 gil::bgra32f_pixel_t,
121 gil::bgra32fc_pixel_t,
122 gil::bgra32s_pixel_t,
123 gil::bgra32sc_pixel_t,
127 gil::cmyk8sc_pixel_t,
129 gil::cmyk16c_pixel_t,
130 gil::cmyk16s_pixel_t,
131 gil::cmyk16sc_pixel_t,
133 gil::cmyk32c_pixel_t,
134 gil::cmyk32f_pixel_t,
135 gil::cmyk32fc_pixel_t,
136 gil::cmyk32s_pixel_t,
137 gil::cmyk32sc_pixel_t,
141 gil::rgba8sc_pixel_t,
143 gil::rgba16c_pixel_t,
144 gil::rgba16s_pixel_t,
145 gil::rgba16sc_pixel_t,
147 gil::rgba32c_pixel_t,
148 gil::rgba32f_pixel_t,
149 gil::rgba32fc_pixel_t,
150 gil::rgba32s_pixel_t,
151 gil::rgba32sc_pixel_t