13 #ifndef GIL_DYNAMICIMAGE_IMAGE_VIEWS_HPP
14 #define GIL_DYNAMICIMAGE_IMAGE_VIEWS_HPP
26 #include "../../image_view_factory.hpp"
28 namespace boost {
namespace gil {
31 template <
typename Result>
struct flipped_up_down_view_fn {
32 typedef Result result_type;
33 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(flipped_up_down_view(src)); }
35 template <
typename Result>
struct flipped_left_right_view_fn {
36 typedef Result result_type;
37 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(flipped_left_right_view(src)); }
39 template <
typename Result>
struct rotated90cw_view_fn {
40 typedef Result result_type;
41 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated90cw_view(src)); }
43 template <
typename Result>
struct rotated90ccw_view_fn {
44 typedef Result result_type;
45 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated90ccw_view(src)); }
47 template <
typename Result>
struct tranposed_view_fn {
48 typedef Result result_type;
49 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(tranposed_view(src)); }
51 template <
typename Result>
struct rotated180_view_fn {
52 typedef Result result_type;
53 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(rotated180_view(src)); }
55 template <
typename Result>
struct subimage_view_fn {
56 typedef Result result_type;
57 subimage_view_fn(
const point2<std::ptrdiff_t>& topleft,
const point2<std::ptrdiff_t>& dimensions) : _topleft(topleft), _size2(dimensions) {}
58 point2<std::ptrdiff_t> _topleft,_size2;
59 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(subimage_view(src,_topleft,_size2)); }
61 template <
typename Result>
struct subsampled_view_fn {
62 typedef Result result_type;
63 subsampled_view_fn(
const point2<std::ptrdiff_t>& step) : _step(step) {}
64 point2<std::ptrdiff_t> _step;
65 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(subsampled_view(src,_step)); }
67 template <
typename Result>
struct nth_channel_view_fn {
68 typedef Result result_type;
69 nth_channel_view_fn(
int n) : _n(n) {}
71 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(nth_channel_view(src,_n)); }
73 template <
typename DstP,
typename Result,
typename CC = default_color_converter>
struct color_converted_view_fn {
74 typedef Result result_type;
75 color_converted_view_fn(CC cc = CC()): _cc(cc) {}
77 template <
typename View> result_type operator()(
const View& src)
const {
return result_type(color_converted_view<DstP>(src, _cc)); }
86 template <
typename ViewTypes>
inline
87 typename dynamic_y_step_type<any_image_view<ViewTypes> >::type flipped_up_down_view(
const any_image_view<ViewTypes>& src) {
88 return apply_operation(src,detail::flipped_up_down_view_fn<
typename dynamic_y_step_type<any_image_view<ViewTypes> >::type>());
92 template <
typename ViewTypes>
inline
93 typename dynamic_x_step_type<any_image_view<ViewTypes> >::type flipped_left_right_view(
const any_image_view<ViewTypes>& src) {
94 return apply_operation(src,detail::flipped_left_right_view_fn<
typename dynamic_x_step_type<any_image_view<ViewTypes> >::type>());
98 template <
typename ViewTypes>
inline
99 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type transposed_view(
const any_image_view<ViewTypes>& src) {
100 return apply_operation(src,detail::tranposed_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
104 template <
typename ViewTypes>
inline
105 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90cw_view(
const any_image_view<ViewTypes>& src) {
106 return apply_operation(src,detail::rotated90cw_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
110 template <
typename ViewTypes>
inline
111 typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90ccw_view(
const any_image_view<ViewTypes>& src) {
112 return apply_operation(src,detail::rotated90ccw_view_fn<
typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
116 template <
typename ViewTypes>
inline
117 typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type rotated180_view(
const any_image_view<ViewTypes>& src) {
118 return apply_operation(src,detail::rotated180_view_fn<
typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type>());
122 template <
typename ViewTypes>
inline
123 any_image_view<ViewTypes> subimage_view(
const any_image_view<ViewTypes>& src,
const point2<std::ptrdiff_t>& topleft,
const point2<std::ptrdiff_t>& dimensions) {
124 return apply_operation(src,detail::subimage_view_fn<any_image_view<ViewTypes> >(topleft,dimensions));
128 template <
typename ViewTypes>
inline
129 any_image_view<ViewTypes> subimage_view(
const any_image_view<ViewTypes>& src,
int xMin,
int yMin,
int width,
int height) {
130 return apply_operation(src,detail::subimage_view_fn<any_image_view<ViewTypes> >(point2<std::ptrdiff_t>(xMin,yMin),point2<std::ptrdiff_t>(width,height)));
134 template <
typename ViewTypes>
inline
135 typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type subsampled_view(
const any_image_view<ViewTypes>& src,
const point2<std::ptrdiff_t>& step) {
136 return apply_operation(src,detail::subsampled_view_fn<
typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type>(step));
140 template <
typename ViewTypes>
inline
141 typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type subsampled_view(
const any_image_view<ViewTypes>& src,
int xStep,
int yStep) {
142 return apply_operation(src,detail::subsampled_view_fn<
typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type>(point2<std::ptrdiff_t>(xStep,yStep)));
146 template <
typename View>
struct get_nthchannel_type {
typedef typename nth_channel_view_type<View>::type type; };
147 template <
typename Views>
struct views_get_nthchannel_type :
public mpl::transform<Views, get_nthchannel_type<mpl::_1> > {};
152 template <
typename ViewTypes>
158 template <
typename ViewTypes>
inline
164 template <
typename View,
typename DstP,
typename CC>
struct get_ccv_type :
public color_converted_view_type<View, DstP, CC> {};
165 template <
typename Views,
typename DstP,
typename CC>
struct views_get_ccv_type :
public mpl::transform<Views, get_ccv_type<mpl::_1,DstP,CC> > {};
170 template <
typename ViewTypes,
typename DstP,
typename CC>
177 template <
typename DstP,
typename ViewTypes,
typename CC>
inline
184 template <
typename ViewTypes,
typename DstP>
191 template <
typename DstP,
typename ViewTypes>
inline
200 template <
typename DstP,
typename ViewTypes,
typename CC>
inline
208 template <
typename DstP,
typename ViewTypes>
inline
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:391
Returns the type of a view that does color conversion upon dereferencing its pixels.
Definition: image_view_factory.hpp:164
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:35
Represents a run-time specified image view. Models HasDynamicXStepTypeConcept, HasDynamicYStepTypeCon...
Definition: any_image_view.hpp:64
Support for run-time instantiated image view.