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/dynamic_step.hpp> 14 #include <boost/gil/image_view_factory.hpp> 15 #include <boost/gil/point.hpp> 17 namespace boost {
namespace gil {
23 template <
typename Result>
struct flipped_up_down_view_fn {
24 using result_type = Result;
25 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(flipped_up_down_view(src)); }
27 template <
typename Result>
struct flipped_left_right_view_fn {
28 using result_type = Result;
29 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(flipped_left_right_view(src)); }
31 template <
typename Result>
struct rotated90cw_view_fn {
32 using result_type = Result;
33 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated90cw_view(src)); }
35 template <
typename Result>
struct rotated90ccw_view_fn {
36 using result_type = Result;
37 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated90ccw_view(src)); }
39 template <
typename Result>
struct tranposed_view_fn {
40 using result_type = Result;
41 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(tranposed_view(src)); }
43 template <
typename Result>
struct rotated180_view_fn {
44 using result_type = Result;
45 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(
rotated180_view(src)); }
48 template <
typename Result>
49 struct subimage_view_fn
51 using result_type = Result;
52 subimage_view_fn(point_t
const& topleft, point_t
const& dimensions)
53 : _topleft(topleft), _size2(dimensions)
56 template <
typename View>
57 result_type operator()(
const View& src)
const 66 template <
typename Result>
67 struct subsampled_view_fn
69 using result_type = Result;
70 subsampled_view_fn(point_t
const& step) : _step(step) {}
72 template <
typename View>
73 result_type operator()(
const View& src)
const 81 template <
typename Result>
struct nth_channel_view_fn {
82 using result_type = Result;
83 nth_channel_view_fn(
int n) : _n(n) {}
85 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(nth_channel_view(src,_n)); }
87 template <
typename DstP,
typename Result,
typename CC = default_color_converter>
struct color_converted_view_fn {
88 using result_type = Result;
89 color_converted_view_fn(CC cc = CC()): _cc(cc) {}
91 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(color_converted_view<DstP>(src, _cc)); }
100 template <
typename ViewTypes>
inline 101 typename dynamic_y_step_type<any_image_view<ViewTypes> >::type flipped_up_down_view(
const any_image_view<ViewTypes>& src) {
102 return apply_operation(src,detail::flipped_up_down_view_fn<
typename dynamic_y_step_type<any_image_view<ViewTypes> >::type>());
106 template <
typename ViewTypes>
inline 107 typename dynamic_x_step_type<any_image_view<ViewTypes> >::type flipped_left_right_view(
const any_image_view<ViewTypes>& src) {
108 return apply_operation(src,detail::flipped_left_right_view_fn<
typename dynamic_x_step_type<any_image_view<ViewTypes> >::type>());
112 template <
typename ViewTypes>
inline 113 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type transposed_view(
const any_image_view<ViewTypes>& src) {
114 return apply_operation(src,detail::tranposed_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
118 template <
typename ViewTypes>
inline 119 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90cw_view(
const any_image_view<ViewTypes>& src) {
120 return apply_operation(src,detail::rotated90cw_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
124 template <
typename ViewTypes>
inline 125 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90ccw_view(
const any_image_view<ViewTypes>& src) {
126 return apply_operation(src,detail::rotated90ccw_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
131 template <
typename ViewTypes>
141 template <
typename ViewTypes>
146 using subimage_view_fn = detail::subimage_view_fn<any_image_view<ViewTypes>>;
152 template <
typename ViewTypes>
154 int xMin,
int yMin,
int width,
int height)
157 using subimage_view_fn = detail::subimage_view_fn<any_image_view<ViewTypes>>;
163 template <
typename ViewTypes>
174 template <
typename ViewTypes>
179 using subsampled_view_fn = detail::subsampled_view_fn<step_type>;
184 template <
typename View>
struct get_nthchannel_type {
using type =
typename nth_channel_view_type<View>::type; };
185 template <
typename Views>
struct views_get_nthchannel_type :
public mpl::transform<Views, get_nthchannel_type<mpl::_1> > {};
190 template <
typename ViewTypes>
196 template <
typename ViewTypes>
inline 202 template <
typename View,
typename DstP,
typename CC>
struct get_ccv_type :
public color_converted_view_type<View, DstP, CC> {};
203 template <
typename Views,
typename DstP,
typename CC>
struct views_get_ccv_type :
public mpl::transform<Views, get_ccv_type<mpl::_1,DstP,CC> > {};
208 template <
typename ViewTypes,
typename DstP,
typename CC>
216 template <
typename DstP,
typename ViewTypes,
typename CC>
inline 223 template <
typename ViewTypes,
typename DstP>
231 template <
typename DstP,
typename ViewTypes>
inline 240 template <
typename DstP,
typename ViewTypes,
typename CC>
inline 248 template <
typename DstP,
typename ViewTypes>
inline
Definition: algorithm.hpp:30
Returns the type of a view that has a dynamic step along both X and Y.
Definition: dynamic_step.hpp:27
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:387
BOOST_FORCEINLINE auto 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
Returns the type of a view that does color conversion upon dereferencing its pixels.
Definition: image_view_factory.hpp:155
Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
Definition: any_image_view.hpp:61