14 #ifndef GIL_CHANNEL_NUMERIC_OPERATIONS_HPP 15 #define GIL_CHANNEL_NUMERIC_OPERATIONS_HPP 32 #include <boost/gil/gil_config.hpp> 33 #include <boost/gil/channel.hpp> 35 namespace boost {
namespace gil {
40 template <
typename Channel1,
typename Channel2,
typename ChannelR>
41 struct channel_plus_t :
public std::binary_function<Channel1,Channel2,ChannelR> {
42 ChannelR operator()(
typename channel_traits<Channel1>::const_reference ch1,
43 typename channel_traits<Channel2>::const_reference ch2)
const {
44 return ChannelR(ch1)+ChannelR(ch2);
51 template <
typename Channel1,
typename Channel2,
typename ChannelR>
52 struct channel_minus_t :
public std::binary_function<Channel1,Channel2,ChannelR> {
53 ChannelR operator()(
typename channel_traits<Channel1>::const_reference ch1,
54 typename channel_traits<Channel2>::const_reference ch2)
const {
55 return ChannelR(ch1)-ChannelR(ch2);
62 template <
typename Channel1,
typename Channel2,
typename ChannelR>
64 ChannelR operator()(
typename channel_traits<Channel1>::const_reference ch1,
65 typename channel_traits<Channel2>::const_reference ch2)
const {
66 return ChannelR(ch1)*ChannelR(ch2);
73 template <
typename Channel1,
typename Channel2,
typename ChannelR>
75 ChannelR operator()(
typename channel_traits<Channel1>::const_reference ch1,
76 typename channel_traits<Channel2>::const_reference ch2)
const {
77 return ChannelR(ch1)/ChannelR(ch2);
84 template <
typename Channel,
typename Scalar,
typename ChannelR>
86 ChannelR operator()(
typename channel_traits<Channel>::const_reference ch,
87 const Scalar& s)
const {
88 return ChannelR(ch)+ChannelR(s);
95 template <
typename Channel,
typename Scalar,
typename ChannelR>
97 ChannelR operator()(
typename channel_traits<Channel>::const_reference ch,
98 const Scalar& s)
const {
99 return ChannelR(ch-s);
106 template <
typename Channel,
typename Scalar,
typename ChannelR>
108 ChannelR operator()(
typename channel_traits<Channel>::const_reference ch,
109 const Scalar& s)
const {
110 return ChannelR(ch)*ChannelR(s);
117 template <
typename Channel,
typename Scalar,
typename ChannelR>
119 ChannelR operator()(
typename channel_traits<Channel>::const_reference ch,
120 const Scalar& s)
const {
121 return ChannelR(ch)/ChannelR(s);
128 template <
typename Channel>
130 typename channel_traits<Channel>::reference
131 operator()(
typename channel_traits<Channel>::reference ch)
const {
139 template <
typename Channel>
141 typename channel_traits<Channel>::reference
142 operator()(
typename channel_traits<Channel>::reference ch)
const {
143 return ch=Channel(0);
150 template <
typename Channel1,
typename Channel2>
152 typename channel_traits<Channel2>::reference
153 operator()(
typename channel_traits<Channel1>::const_reference ch1,
154 typename channel_traits<Channel2>::reference ch2)
const {
155 return ch2=Channel2(ch1);