Generic Image Library: image.hpp Source File

###  | #  |

concepts/image.hpp
1//
2// Copyright 2005-2007 Adobe Systems Incorporated
3//
4// Distributed under the Boost Software License, Version 1.0
5// See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt
7//
8#ifndef BOOST_GIL_CONCEPTS_IMAGE_HPP
9#define BOOST_GIL_CONCEPTS_IMAGE_HPP
10
11#include <boost/gil/concepts/basic.hpp>
12#include <boost/gil/concepts/concept_check.hpp>
13#include <boost/gil/concepts/fwd.hpp>
14#include <boost/gil/concepts/image_view.hpp>
15#include <boost/gil/concepts/point.hpp>
16#include <boost/gil/detail/mp11.hpp>
17
18#include <type_traits>
19
20#if defined(BOOST_CLANG)
21#pragma clang diagnostic push
22#pragma clang diagnostic ignored "-Wunknown-pragmas"
23#pragma clang diagnostic ignored "-Wunused-local-typedefs"
24#endif
25
26#if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
27#pragma GCC diagnostic push
28#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
29#endif
30
31namespace boost { namespace gil {
32
56template <typename Image>
57 struct RandomAccessNDImageConcept
58{
59 void constraints()
60 {
61 gil_function_requires<Regular<Image>>();
62
63 using view_t = typename Image::view_t;
64 gil_function_requires<MutableRandomAccessNDImageViewConcept<view_t>>();
65
66 using const_view_t = typename Image::const_view_t;
67 using pixel_t = typename Image::value_type;
68 using point_t = typename Image::point_t;
69 gil_function_requires<PointNDConcept<point_t>>();
70
71 const_view_t cv = const_view(image);
72 ignore_unused_variable_warning(cv);
73 view_t v = view(image);
74 ignore_unused_variable_warning(v);
75
76 pixel_t fill_value;
77 point_t pt = image.dimensions();
78 Image image1(pt);
79 Image image2(pt, 1);
80 Image image3(pt, fill_value, 1);
81 image.recreate(pt);
82 image.recreate(pt, 1);
83 image.recreate(pt, fill_value, 1);
84 }
85 Image image;
86};
87
88
108template <typename Image>
109 struct RandomAccess2DImageConcept
110{
111 void constraints()
112 {
113 gil_function_requires<RandomAccessNDImageConcept<Image>>();
114 using x_coord_t = typename Image::x_coord_t;
115 using y_coord_t = typename Image::y_coord_t;
116 using value_t = typename Image::value_type;
117
118 gil_function_requires<MutableRandomAccess2DImageViewConcept<typename Image::view_t>>();
119
120 x_coord_t w=image.width();
121 y_coord_t h=image.height();
122 value_t fill_value;
123 Image im1(w,h);
124 Image im2(w,h,1);
125 Image im3(w,h,fill_value,1);
126 image.recreate(w,h);
127 image.recreate(w,h,1);
128 image.recreate(w,h,fill_value,1);
129 }
130 Image image;
131};
132
143template <typename Image>
144 struct ImageConcept
145{
146 void constraints()
147 {
148 gil_function_requires<RandomAccess2DImageConcept<Image>>();
149 gil_function_requires<MutableImageViewConcept<typename Image::view_t>>();
150 using coord_t = typename Image::coord_t;
151 static_assert(num_channels<Image>::value == mp11::mp_size<typename color_space_type<Image>::type>::value, "");
152
153 static_assert(std::is_same<coord_t, typename Image::x_coord_t>::value, "");
154 static_assert(std::is_same<coord_t, typename Image::y_coord_t>::value, "");
155 }
156 Image image;
157};
158
159}} // namespace boost::gil
160
161#if defined(BOOST_CLANG)
162#pragma clang diagnostic pop
163#endif
164
165#if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
166#pragma GCC diagnostic pop
167#endif
168
169#endif
boost::gil::image
container interface over image view. Models ImageConcept, PixelBasedConcept
Definition metafunctions.hpp:31
boost::gil::point< std::ptrdiff_t >
boost::gil::view
auto view(image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::view_t const &
Returns the non-constant-pixel view of an image.
Definition image.hpp:565
boost::gil::const_view
auto const_view(const image< Pixel, IsPlanar, Alloc > &img) -> typename image< Pixel, IsPlanar, Alloc >::const_view_t const
Returns the constant-pixel view of an image.
Definition image.hpp:573
boost
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition algorithm.hpp:36
boost::gil::ImageConcept
2-dimensional image whose value type models PixelValueConcept
Definition concepts/image.hpp:145
boost::gil::RandomAccess2DImageConcept
2-dimensional container of values
Definition concepts/image.hpp:110
boost::gil::RandomAccessNDImageConcept
N-dimensional container of values.
Definition concepts/image.hpp:58
boost::gil::num_channels
Returns the number of channels of a pixel-based GIL construct.
Definition fwd.hpp:28