8 #ifndef BOOST_GIL_EXTENSION_DYNAMIC_IMAGE_IMAGE_VIEW_FACTORY_HPP
9 #define BOOST_GIL_EXTENSION_DYNAMIC_IMAGE_IMAGE_VIEW_FACTORY_HPP
11 #include <boost/gil/extension/dynamic_image/any_image_view.hpp>
13 #include <boost/gil/image_view_factory.hpp>
14 #include <boost/gil/point.hpp>
16 namespace boost {
namespace gil {
22 template <
typename Result>
struct flipped_up_down_view_fn {
23 typedef Result result_type;
24 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(flipped_up_down_view(src)); }
26 template <
typename Result>
struct flipped_left_right_view_fn {
27 typedef Result result_type;
28 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(flipped_left_right_view(src)); }
30 template <
typename Result>
struct rotated90cw_view_fn {
31 typedef Result result_type;
32 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated90cw_view(src)); }
34 template <
typename Result>
struct rotated90ccw_view_fn {
35 typedef Result result_type;
36 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated90ccw_view(src)); }
38 template <
typename Result>
struct tranposed_view_fn {
39 typedef Result result_type;
40 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(tranposed_view(src)); }
42 template <
typename Result>
struct rotated180_view_fn {
43 typedef Result result_type;
44 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(
rotated180_view(src)); }
47 template <
typename Result>
48 struct subimage_view_fn
50 typedef Result result_type;
51 subimage_view_fn(point_t
const& topleft, point_t
const& dimensions)
52 : _topleft(topleft), _size2(dimensions)
55 template <
typename View>
56 result_type operator()(
const View& src)
const
65 template <
typename Result>
66 struct subsampled_view_fn
68 typedef Result result_type;
69 subsampled_view_fn(point_t
const& step) : _step(step) {}
71 template <
typename View>
72 result_type operator()(
const View& src)
const
80 template <
typename Result>
struct nth_channel_view_fn {
81 typedef Result result_type;
82 nth_channel_view_fn(
int n) : _n(n) {}
84 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(nth_channel_view(src,_n)); }
86 template <
typename DstP,
typename Result,
typename CC = default_color_converter>
struct color_converted_view_fn {
87 typedef Result result_type;
88 color_converted_view_fn(CC cc = CC()): _cc(cc) {}
90 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(color_converted_view<DstP>(src, _cc)); }
99 template <
typename ViewTypes>
inline
100 typename dynamic_y_step_type<any_image_view<ViewTypes> >::type flipped_up_down_view(
const any_image_view<ViewTypes>& src) {
101 return apply_operation(src,detail::flipped_up_down_view_fn<
typename dynamic_y_step_type<any_image_view<ViewTypes> >::type>());
105 template <
typename ViewTypes>
inline
106 typename dynamic_x_step_type<any_image_view<ViewTypes> >::type flipped_left_right_view(
const any_image_view<ViewTypes>& src) {
107 return apply_operation(src,detail::flipped_left_right_view_fn<
typename dynamic_x_step_type<any_image_view<ViewTypes> >::type>());
111 template <
typename ViewTypes>
inline
112 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type transposed_view(
const any_image_view<ViewTypes>& src) {
113 return apply_operation(src,detail::tranposed_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
117 template <
typename ViewTypes>
inline
118 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90cw_view(
const any_image_view<ViewTypes>& src) {
119 return apply_operation(src,detail::rotated90cw_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
123 template <
typename ViewTypes>
inline
124 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90ccw_view(
const any_image_view<ViewTypes>& src) {
125 return apply_operation(src,detail::rotated90ccw_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
130 template <
typename ViewTypes>
140 template <
typename ViewTypes>
145 using subimage_view_fn = detail::subimage_view_fn<any_image_view<ViewTypes>>;
151 template <
typename ViewTypes>
153 int xMin,
int yMin,
int width,
int height)
156 using subimage_view_fn = detail::subimage_view_fn<any_image_view<ViewTypes>>;
162 template <
typename ViewTypes>
173 template <
typename ViewTypes>
178 using subsampled_view_fn = detail::subsampled_view_fn<step_type>;
183 template <
typename View>
struct get_nthchannel_type {
typedef typename nth_channel_view_type<View>::type type; };
184 template <
typename Views>
struct views_get_nthchannel_type :
public mpl::transform<Views, get_nthchannel_type<mpl::_1> > {};
189 template <
typename ViewTypes>
195 template <
typename ViewTypes>
inline
201 template <
typename View,
typename DstP,
typename CC>
struct get_ccv_type :
public color_converted_view_type<View, DstP, CC> {};
202 template <
typename Views,
typename DstP,
typename CC>
struct views_get_ccv_type :
public mpl::transform<Views, get_ccv_type<mpl::_1,DstP,CC> > {};
207 template <
typename ViewTypes,
typename DstP,
typename CC>
214 template <
typename DstP,
typename ViewTypes,
typename CC>
inline
221 template <
typename ViewTypes,
typename DstP>
228 template <
typename DstP,
typename ViewTypes>
inline
237 template <
typename DstP,
typename ViewTypes,
typename CC>
inline
245 template <
typename DstP,
typename ViewTypes>
inline
Returns the type of a view that has a dynamic step along both X and Y.
Definition: image_view_factory.hpp:41
Given a source image view type View, returns the type of an image view over a single channel of ViewI...
Definition: image_view_factory.hpp:381
Returns the type of a view that does color conversion upon dereferencing its pixels.
Definition: image_view_factory.hpp:154
BOOST_FORCEINLINE UnaryOp::result_type apply_operation(variant< Types > &arg, UnaryOp op)
Invokes a generic mutable operation (represented as a unary function object) on a variant...
Definition: apply_operation.hpp:31
Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
Definition: any_image_view.hpp:60