summaryrefslogtreecommitdiff
path: root/boost/gil/extension/dynamic_image/image_view_factory.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/gil/extension/dynamic_image/image_view_factory.hpp')
-rw-r--r--boost/gil/extension/dynamic_image/image_view_factory.hpp167
1 files changed, 102 insertions, 65 deletions
diff --git a/boost/gil/extension/dynamic_image/image_view_factory.hpp b/boost/gil/extension/dynamic_image/image_view_factory.hpp
index 69ac4f681d..f46e24a2bf 100644
--- a/boost/gil/extension/dynamic_image/image_view_factory.hpp
+++ b/boost/gil/extension/dynamic_image/image_view_factory.hpp
@@ -1,32 +1,23 @@
-/*
- Copyright 2005-2007 Adobe Systems Incorporated
-
- Use, modification and distribution are subject to the Boost Software License,
- Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt).
+//
+// Copyright 2005-2007 Adobe Systems Incorporated
+//
+// Distributed under the Boost Software License, Version 1.0
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+#ifndef BOOST_GIL_EXTENSION_DYNAMIC_IMAGE_IMAGE_VIEW_FACTORY_HPP
+#define BOOST_GIL_EXTENSION_DYNAMIC_IMAGE_IMAGE_VIEW_FACTORY_HPP
- See http://opensource.adobe.com/gil for most recent version including documentation.
-*/
+#include <boost/gil/extension/dynamic_image/any_image_view.hpp>
-/*************************************************************************************************/
-
-#ifndef GIL_DYNAMICIMAGE_IMAGE_VIEWS_HPP
-#define GIL_DYNAMICIMAGE_IMAGE_VIEWS_HPP
-
-/*!
-/// \file
-/// \brief Methods for constructing any image views from other any image views
-/// \author Lubomir Bourdev and Hailin Jin \n
-/// Adobe Systems Incorporated
-/// \date 2005-2007 \n Last updated on January 31, 2007
-/// Extends image view factory to runtime type-specified views (any_image_view)
-*/
-
-#include "any_image_view.hpp"
-#include "../../image_view_factory.hpp"
+#include <boost/gil/image_view_factory.hpp>
+#include <boost/gil/point.hpp>
namespace boost { namespace gil {
+// Methods for constructing any image views from other any image views
+// Extends image view factory to runtime type-specified views (any_image_view)
+
namespace detail {
template <typename Result> struct flipped_up_down_view_fn {
typedef Result result_type;
@@ -52,18 +43,40 @@ template <typename Result> struct rotated180_view_fn {
typedef Result result_type;
template <typename View> result_type operator()(const View& src) const { return result_type(rotated180_view(src)); }
};
-template <typename Result> struct subimage_view_fn {
+
+template <typename Result>
+struct subimage_view_fn
+{
typedef Result result_type;
- subimage_view_fn(const point2<std::ptrdiff_t>& topleft, const point2<std::ptrdiff_t>& dimensions) : _topleft(topleft), _size2(dimensions) {}
- point2<std::ptrdiff_t> _topleft,_size2;
- template <typename View> result_type operator()(const View& src) const { return result_type(subimage_view(src,_topleft,_size2)); }
+ subimage_view_fn(point_t const& topleft, point_t const& dimensions)
+ : _topleft(topleft), _size2(dimensions)
+ {}
+
+ template <typename View>
+ result_type operator()(const View& src) const
+ {
+ return result_type(subimage_view(src,_topleft,_size2));
+ }
+
+ point_t _topleft;
+ point_t _size2;
};
-template <typename Result> struct subsampled_view_fn {
+
+template <typename Result>
+struct subsampled_view_fn
+{
typedef Result result_type;
- subsampled_view_fn(const point2<std::ptrdiff_t>& step) : _step(step) {}
- point2<std::ptrdiff_t> _step;
- template <typename View> result_type operator()(const View& src) const { return result_type(subsampled_view(src,_step)); }
+ subsampled_view_fn(point_t const& step) : _step(step) {}
+
+ template <typename View>
+ result_type operator()(const View& src) const
+ {
+ return result_type(subsampled_view(src,_step));
+ }
+
+ point_t _step;
};
+
template <typename Result> struct nth_channel_view_fn {
typedef Result result_type;
nth_channel_view_fn(int n) : _n(n) {}
@@ -84,62 +97,86 @@ template <typename DstP, typename Result, typename CC = default_color_converter>
/// \ingroup ImageViewTransformationsFlipUD
template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_y_step_type<any_image_view<ViewTypes> >::type flipped_up_down_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::flipped_up_down_view_fn<typename dynamic_y_step_type<any_image_view<ViewTypes> >::type>());
+typename dynamic_y_step_type<any_image_view<ViewTypes> >::type flipped_up_down_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::flipped_up_down_view_fn<typename dynamic_y_step_type<any_image_view<ViewTypes> >::type>());
}
/// \ingroup ImageViewTransformationsFlipLR
template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_x_step_type<any_image_view<ViewTypes> >::type flipped_left_right_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::flipped_left_right_view_fn<typename dynamic_x_step_type<any_image_view<ViewTypes> >::type>());
+typename dynamic_x_step_type<any_image_view<ViewTypes> >::type flipped_left_right_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::flipped_left_right_view_fn<typename dynamic_x_step_type<any_image_view<ViewTypes> >::type>());
}
/// \ingroup ImageViewTransformationsTransposed
template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type transposed_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::tranposed_view_fn<typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
+typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type transposed_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::tranposed_view_fn<typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
}
/// \ingroup ImageViewTransformations90CW
template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90cw_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::rotated90cw_view_fn<typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
+typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90cw_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::rotated90cw_view_fn<typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
}
/// \ingroup ImageViewTransformations90CCW
template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90ccw_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::rotated90ccw_view_fn<typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
+typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type rotated90ccw_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::rotated90ccw_view_fn<typename dynamic_xy_step_transposed_type<any_image_view<ViewTypes> >::type>());
}
/// \ingroup ImageViewTransformations180
-template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type rotated180_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::rotated180_view_fn<typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type>());
+/// Models MPL Random Access Container of models of ImageViewConcept
+template <typename ViewTypes>
+inline auto rotated180_view(const any_image_view<ViewTypes>& src)
+ -> typename dynamic_xy_step_type<any_image_view<ViewTypes>>::type
+{
+ using step_type = typename dynamic_xy_step_type<any_image_view<ViewTypes>>::type;
+ return apply_operation(src, detail::rotated180_view_fn<step_type>());
}
/// \ingroup ImageViewTransformationsSubimage
-template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-any_image_view<ViewTypes> subimage_view(const any_image_view<ViewTypes>& src, const point2<std::ptrdiff_t>& topleft, const point2<std::ptrdiff_t>& dimensions) {
- return apply_operation(src,detail::subimage_view_fn<any_image_view<ViewTypes> >(topleft,dimensions));
+/// // Models MPL Random Access Container of models of ImageViewConcept
+template <typename ViewTypes>
+inline auto subimage_view(any_image_view<ViewTypes> const& src,
+ point_t const& topleft, point_t const& dimensions)
+ -> any_image_view<ViewTypes>
+{
+ using subimage_view_fn = detail::subimage_view_fn<any_image_view<ViewTypes>>;
+ return apply_operation(src, subimage_view_fn(topleft, dimensions));
}
/// \ingroup ImageViewTransformationsSubimage
-template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-any_image_view<ViewTypes> subimage_view(const any_image_view<ViewTypes>& src, int xMin, int yMin, int width, int height) {
- return apply_operation(src,detail::subimage_view_fn<any_image_view<ViewTypes> >(point2<std::ptrdiff_t>(xMin,yMin),point2<std::ptrdiff_t>(width,height)));
+/// Models MPL Random Access Container of models of ImageViewConcept
+template <typename ViewTypes>
+inline auto subimage_view(any_image_view<ViewTypes> const& src,
+ int xMin, int yMin, int width, int height)
+ -> any_image_view<ViewTypes>
+{
+ using subimage_view_fn = detail::subimage_view_fn<any_image_view<ViewTypes>>;
+ return apply_operation(src, subimage_view_fn(point_t(xMin, yMin),point_t(width, height)));
}
/// \ingroup ImageViewTransformationsSubsampled
-template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type subsampled_view(const any_image_view<ViewTypes>& src, const point2<std::ptrdiff_t>& step) {
- return apply_operation(src,detail::subsampled_view_fn<typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type>(step));
+/// Models MPL Random Access Container of models of ImageViewConcept
+template <typename ViewTypes>
+inline auto subsampled_view(any_image_view<ViewTypes> const& src, point_t const& step)
+ -> typename dynamic_xy_step_type<any_image_view<ViewTypes>>::type
+{
+ using step_type = typename dynamic_xy_step_type<any_image_view<ViewTypes>>::type;
+ using subsampled_view = detail::subsampled_view_fn<step_type>;
+ return apply_operation(src, subsampled_view(step));
}
/// \ingroup ImageViewTransformationsSubsampled
-template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type subsampled_view(const any_image_view<ViewTypes>& src, int xStep, int yStep) {
- return apply_operation(src,detail::subsampled_view_fn<typename dynamic_xy_step_type<any_image_view<ViewTypes> >::type>(point2<std::ptrdiff_t>(xStep,yStep)));
+/// Models MPL Random Access Container of models of ImageViewConcept
+template <typename ViewTypes>
+inline auto subsampled_view(any_image_view<ViewTypes> const& src, int xStep, int yStep)
+ -> typename dynamic_xy_step_type<any_image_view<ViewTypes>>::type
+{
+ using step_type = typename dynamic_xy_step_type<any_image_view<ViewTypes>>::type;
+ using subsampled_view_fn = detail::subsampled_view_fn<step_type>;
+ return apply_operation(src, subsampled_view_fn(point_t(xStep, yStep)));
}
namespace detail {
@@ -156,8 +193,8 @@ struct nth_channel_view_type<any_image_view<ViewTypes> > {
/// \ingroup ImageViewTransformationsNthChannel
template <typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename nth_channel_view_type<any_image_view<ViewTypes> >::type nth_channel_view(const any_image_view<ViewTypes>& src, int n) {
- return apply_operation(src,detail::nth_channel_view_fn<typename nth_channel_view_type<any_image_view<ViewTypes> >::type>(n));
+typename nth_channel_view_type<any_image_view<ViewTypes> >::type nth_channel_view(const any_image_view<ViewTypes>& src, int n) {
+ return apply_operation(src,detail::nth_channel_view_fn<typename nth_channel_view_type<any_image_view<ViewTypes> >::type>(n));
}
namespace detail {
@@ -176,7 +213,7 @@ struct color_converted_view_type<any_image_view<ViewTypes>,DstP,CC> {
/// \brief overload of generic color_converted_view with user defined color-converter
template <typename DstP, typename ViewTypes, typename CC> inline // Models MPL Random Access Container of models of ImageViewConcept
typename color_converted_view_type<any_image_view<ViewTypes>, DstP, CC>::type color_converted_view(const any_image_view<ViewTypes>& src, CC) {
- return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP, CC>::type >());
+ return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP, CC>::type >());
}
/// \ingroup ImageViewTransformationsColorConvert
@@ -189,8 +226,8 @@ struct color_converted_view_type<any_image_view<ViewTypes>,DstP> {
/// \ingroup ImageViewTransformationsColorConvert
/// \brief overload of generic color_converted_view with the default color-converter
template <typename DstP, typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type color_converted_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type >());
+typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type color_converted_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type >());
}
@@ -199,15 +236,15 @@ typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type color_
/// These are workarounds for GCC 3.4, which thinks color_converted_view is ambiguous with the same method for templated views (in gil/image_view_factory.hpp)
template <typename DstP, typename ViewTypes, typename CC> inline // Models MPL Random Access Container of models of ImageViewConcept
typename color_converted_view_type<any_image_view<ViewTypes>, DstP, CC>::type any_color_converted_view(const any_image_view<ViewTypes>& src, CC) {
- return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP, CC>::type >());
+ return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP, CC>::type >());
}
/// \ingroup ImageViewTransformationsColorConvert
/// \brief overload of generic color_converted_view with the default color-converter
/// These are workarounds for GCC 3.4, which thinks color_converted_view is ambiguous with the same method for templated views (in gil/image_view_factory.hpp)
template <typename DstP, typename ViewTypes> inline // Models MPL Random Access Container of models of ImageViewConcept
-typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type any_color_converted_view(const any_image_view<ViewTypes>& src) {
- return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type >());
+typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type any_color_converted_view(const any_image_view<ViewTypes>& src) {
+ return apply_operation(src,detail::color_converted_view_fn<DstP,typename color_converted_view_type<any_image_view<ViewTypes>, DstP>::type >());
}
/// \}