23template <
class Value,
class Layout>
24using image = boost::gil::image<boost::gil::pixel<Value, Layout>,
false>;
27 boost::mp11::mp_product<
41 boost::gil::abgr_layout_t,
42 boost::gil::argb_layout_t,
43 boost::gil::bgr_layout_t,
44 boost::gil::bgra_layout_t,
45 boost::gil::cmyk_layout_t,
46 boost::gil::gray_layout_t,
47 boost::gil::rgb_layout_t,
48 boost::gil::rgba_layout_t>>,
49 boost::gil::any_image>;
54 requires requires { boost::gil::view(std::declval<T&>()); }
57 auto ret = T{img.dimensions()};
58 copy_and_convert_pixels(img, view(ret));
64 requires requires { boost::gil::view(std::declval<T&>()); }
67 auto fit = [](std::initializer_list<int> bytes) {
68 return bytes | std::views::transform([](
int i) {
69 return static_cast<std::byte
>(i);
71 std::ranges::to<blob>();
73 auto is = std::istringstream(std::string(as_chars(img.data()), img.size()));
75 if (img.starts_with(fit({0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A})))
76#
if __has_include(<png.h>) && __has_include(<zlib.h>)
77 read_and_convert_image(is, ret, boost::gil::png_tag());
79 throw std::runtime_error(
"compiled without libpng/zlib");
81 else if (img.starts_with(fit({0xFF, 0xD8, 0xFF})))
82#
if __has_include(<jpeglib.h>)
83 read_and_convert_image(is, ret, boost::gil::jpeg_tag());
85 throw std::runtime_error(
"compiled without libjpeg");
88 throw std::runtime_error(
"unsupported image format");
boost::mp11::mp_rename< boost::mp11::mp_product< image, boost::mp11::mp_list< uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double >, boost::mp11::mp_list< boost::gil::abgr_layout_t, boost::gil::argb_layout_t, boost::gil::bgr_layout_t, boost::gil::bgra_layout_t, boost::gil::cmyk_layout_t, boost::gil::gray_layout_t, boost::gil::rgb_layout_t, boost::gil::rgba_layout_t > >, boost::gil::any_image > any_image
Definition gil.hpp:26