8 #ifndef BOOST_GIL_IO_MAKE_DYNAMIC_IMAGE_READER_HPP 9 #define BOOST_GIL_IO_MAKE_DYNAMIC_IMAGE_READER_HPP 11 #include <boost/gil/io/get_reader.hpp> 13 #include <boost/mpl/and.hpp> 15 #include <type_traits> 17 namespace boost {
namespace gil {
19 template <
typename String,
typename FormatTag>
21 auto make_dynamic_image_reader(
22 String
const& file_name, image_read_settings<FormatTag>
const& settings,
23 typename std::enable_if
27 detail::is_supported_path_spec<String>,
28 is_format_tag<FormatTag>
31 ->
typename get_dynamic_image_reader<String, FormatTag>::type
33 using device_t =
typename get_read_device<String, FormatTag>::type;
35 detail::convert_to_native_string(file_name),
36 typename detail::file_stream_device<FormatTag>::read_tag());
38 return typename get_dynamic_image_reader<String, FormatTag>::type(device, settings);
41 template <
typename FormatTag>
43 auto make_dynamic_image_reader(
44 std::wstring
const& file_name, image_read_settings<FormatTag>
const& settings)
45 ->
typename get_dynamic_image_reader<std::wstring, FormatTag>::type
47 char const* str = detail::convert_to_native_string(file_name);
49 using device_t =
typename get_read_device<std::wstring, FormatTag>::type;
50 device_t device(str,
typename detail::file_stream_device<FormatTag>::read_tag());
55 typename get_dynamic_image_reader<std::wstring, FormatTag>::type(device, settings);
58 #ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT 59 template <
typename FormatTag>
61 auto make_dynamic_image_reader(
62 filesystem::path
const& path, image_read_settings<FormatTag>
const& settings)
63 ->
typename get_dynamic_image_reader<std::wstring, FormatTag>::type
65 return make_dynamic_image_reader(path.wstring(), settings);
67 #endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT 69 template <
typename Device,
typename FormatTag>
71 auto make_dynamic_image_reader(
72 Device& file, image_read_settings<FormatTag>
const& settings,
73 typename std::enable_if
77 detail::is_adaptable_input_device<FormatTag, Device>,
78 is_format_tag<FormatTag>
81 ->
typename get_dynamic_image_reader<Device, FormatTag>::type
83 typename get_read_device<Device, FormatTag>::type device(file);
84 return typename get_dynamic_image_reader<Device, FormatTag>::type(device, settings);
89 template <
typename String,
typename FormatTag>
91 auto make_dynamic_image_reader(String
const& file_name, FormatTag
const&,
92 typename std::enable_if
96 detail::is_supported_path_spec<String>,
97 is_format_tag<FormatTag>
100 ->
typename get_dynamic_image_reader<String, FormatTag>::type
102 return make_dynamic_image_reader(file_name, image_read_settings<FormatTag>());
105 template <
typename FormatTag>
107 auto make_dynamic_image_reader(std::wstring
const& file_name, FormatTag
const&)
108 ->
typename get_dynamic_image_reader<std::wstring, FormatTag>::type
110 return make_dynamic_image_reader(file_name, image_read_settings<FormatTag>());
113 #ifdef BOOST_GIL_IO_ADD_FS_PATH_SUPPORT 114 template <
typename FormatTag>
116 auto make_dynamic_image_reader(filesystem::path
const& path, FormatTag
const&)
117 ->
typename get_dynamic_image_reader<std::wstring, FormatTag>::type
119 return make_dynamic_image_reader(path.wstring(), image_read_settings<FormatTag>());
121 #endif // BOOST_GIL_IO_ADD_FS_PATH_SUPPORT 123 template <
typename Device,
typename FormatTag>
125 auto make_dynamic_image_reader(Device& file, FormatTag
const&,
126 typename std::enable_if
130 detail::is_adaptable_input_device<FormatTag, Device>,
131 is_format_tag<FormatTag>
134 ->
typename get_dynamic_image_reader<Device, FormatTag>::type
136 return make_dynamic_image_reader(file, image_read_settings<FormatTag>());
Definition: algorithm.hpp:30