8 #ifndef BOOST_GIL_COLOR_CONVERT_HPP 9 #define BOOST_GIL_COLOR_CONVERT_HPP 11 #include <boost/gil/channel_algorithm.hpp> 12 #include <boost/gil/cmyk.hpp> 13 #include <boost/gil/color_base_algorithm.hpp> 14 #include <boost/gil/gray.hpp> 15 #include <boost/gil/metafunctions.hpp> 16 #include <boost/gil/pixel.hpp> 17 #include <boost/gil/rgb.hpp> 18 #include <boost/gil/rgba.hpp> 19 #include <boost/gil/utilities.hpp> 24 namespace boost {
namespace gil {
40 template <
typename C1,
typename C2>
47 template <
typename P1,
typename P2>
48 void operator()(
const P1& src, P2& dst)
const {
58 template <
typename RedChannel,
typename GreenChannel,
typename BlueChannel,
typename GrayChannelValue>
60 GrayChannelValue operator()(
const RedChannel& red,
const GreenChannel& green,
const BlueChannel& blue)
const {
61 return channel_convert<GrayChannelValue>(
float32_t(
62 channel_convert<float32_t>(red )*0.30f +
63 channel_convert<float32_t>(green)*0.59f +
64 channel_convert<float32_t>(blue )*0.11f) );
69 template <
typename GrayChannelValue>
71 GrayChannelValue operator()(uint8_t red, uint8_t green, uint8_t blue)
const {
72 return channel_convert<GrayChannelValue>(uint8_t(
73 ((uint32_t(red )*4915 + uint32_t(green)*9667 + uint32_t(blue )*1802) + 8192) >> 14));
77 template <
typename GrayChannel,
typename RedChannel,
typename GreenChannel,
typename BlueChannel>
78 typename channel_traits<GrayChannel>::value_type rgb_to_luminance(
const RedChannel& red,
const GreenChannel& green,
const BlueChannel& blue) {
80 typename channel_traits<GrayChannel>::value_type>()(red,green,blue);
89 template <
typename P1,
typename P2>
90 void operator()(
const P1& src, P2& dst)
const {
104 template <
typename P1,
typename P2>
105 void operator()(
const P1& src, P2& dst)
const {
107 channel_traits<typename color_element_type<P2, cyan_t >::type>::min_value();
109 channel_traits<typename color_element_type<P2, magenta_t>::type>::min_value();
111 channel_traits<typename color_element_type<P2, yellow_t >::type>::min_value();
121 template <
typename P1,
typename P2>
122 void operator()(
const P1& src, P2& dst)
const {
124 detail::rgb_to_luminance<typename color_element_type<P2,gray_color_t>::type>(
140 template <
typename P1,
typename P2>
141 void operator()(
const P1& src, P2& dst)
const {
151 float x1 = channel_traits<T2>::max_value()/float(x);
169 template <
typename P1,
typename P2>
170 void operator()(
const P1& src, P2& dst)
const {
173 channel_convert<typename color_element_type<P2,red_t>::type>(
175 (std::min)(channel_traits<T1>::max_value(),
178 channel_convert<typename color_element_type<P2,green_t>::type>(
180 (std::min)(channel_traits<T1>::max_value(),
183 channel_convert<typename color_element_type<P2,blue_t>::type>(
185 (std::min)(channel_traits<T1>::max_value(),
197 template <
typename P1,
typename P2>
198 void operator()(
const P1& src, P2& dst)
const {
200 channel_convert<typename color_element_type<P2,gray_color_t>::type>(
203 detail::rgb_to_luminance<
typename color_element_type<P1,black_t>::type>(
214 template <
typename Pixel>
218 template <
typename Pixel>
220 return channel_traits<typename channel_type<Pixel>::type>::max_value();
225 template <
typename Pixel>
227 return detail::alpha_or_max_impl(p, mpl::contains<
typename color_space_type<Pixel>::type,
alpha_t>());
233 template <
typename C1>
235 template <
typename P1,
typename P2>
236 void operator()(
const P1& src, P2& dst)
const {
253 template <
typename C2>
255 template <
typename P1,
typename P2>
256 void operator()(
const P1& src, P2& dst)
const {
270 template <
typename P1,
typename P2>
271 void operator()(
const P1& src, P2& dst)
const {
283 template <
typename SrcP,
typename DstP>
284 void operator()(
const SrcP& src,DstP& dst)
const {
285 using SrcColorSpace =
typename color_space_type<SrcP>::type;
286 using DstColorSpace =
typename color_space_type<DstP>::type;
295 template <
typename SrcP,
typename DstP>
Magenta.
Definition: cmyk.hpp:27
channel_traits< Channel >::value_type channel_invert(Channel x)
Default implementation. Provide overloads for performance.
Definition: channel_algorithm.hpp:505
Definition: algorithm.hpp:30
Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept, PixelValueConcept, HomogeneousPixelBasedConcept.
Definition: metafunctions.hpp:31
scoped_channel_value< float, float_point_zero< float >, float_point_one< float > > float32_t
32-bit floating point channel type with range [0.0f ... 1.0f]. Models ChannelValueConcept ...
Definition: typedefs.hpp:124
Yellow.
Definition: cmyk.hpp:30
channel_traits< Channel >::value_type channel_multiply(Channel a, Channel b)
A function multiplying two channels. result = a * b / max_value.
Definition: channel_algorithm.hpp:485
color_element_reference_type< ColorBase, Color >::type get_color(ColorBase &cb, Color=Color())
Mutable accessor to the element associated with a given color name.
Definition: color_base_algorithm.hpp:193
Green.
Definition: rgb.hpp:28
Same as channel_converter, except it takes the destination channel by reference, which allows us to m...
Definition: channel_algorithm.hpp:406
Alpha.
Definition: rgba.hpp:23
Definition: color_convert.hpp:30
Color Convertion function object. To be specialized for every src/dst color space.
Definition: color_convert.hpp:41
Blue.
Definition: rgb.hpp:31
void color_convert(const SrcP &src, DstP &dst)
helper function for converting one pixel to another using GIL default color-converters where ScrP mod...
Definition: color_convert.hpp:296
red * .3 + green * .59 + blue * .11 + .5
Definition: color_convert.hpp:59
Black.
Definition: cmyk.hpp:33
Red.
Definition: rgb.hpp:25
Gray.
Definition: gray.hpp:21
Cyan.
Definition: cmyk.hpp:24
class for color-converting one pixel to another
Definition: color_convert.hpp:282