diff options
Diffstat (limited to 'boost/gil/extension/toolbox/color_spaces/gray_alpha.hpp')
-rw-r--r-- | boost/gil/extension/toolbox/color_spaces/gray_alpha.hpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/boost/gil/extension/toolbox/color_spaces/gray_alpha.hpp b/boost/gil/extension/toolbox/color_spaces/gray_alpha.hpp new file mode 100644 index 0000000000..f32a95a541 --- /dev/null +++ b/boost/gil/extension/toolbox/color_spaces/gray_alpha.hpp @@ -0,0 +1,104 @@ +/* + Copyright 2012 Andreas Pokorny + 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). +*/ + +/*************************************************************************************************/ + +#ifndef BOOST_GIL_EXTENSION_TOOLBOX_COLOR_SPACES_GRAY_ALPHA_HPP +#define BOOST_GIL_EXTENSION_TOOLBOX_COLOR_SPACES_GRAY_ALPHA_HPP + +//////////////////////////////////////////////////////////////////////////////////////// +/// \file gray_alpha.hpp +/// \brief Support for gray_alpha color space. +/// \author Andreas Pokorny \n +/// +/// \date 2012 \n +/// +//////////////////////////////////////////////////////////////////////////////////////// + +#include <boost/mpl/contains.hpp> + +#include <boost/gil/gil_config.hpp> +#include <boost/gil/color_convert.hpp> +#include <boost/gil/gray.hpp> +#include <boost/gil/typedefs.hpp> + +namespace boost{ namespace gil { + +typedef mpl::vector2<gray_color_t,alpha_t> gray_alpha_t; + +typedef layout<gray_alpha_t> gray_alpha_layout_t; +typedef layout<gray_alpha_layout_t, mpl::vector2_c<int,1,0> > alpha_gray_layout_t; + +GIL_DEFINE_BASE_TYPEDEFS(8, uint8_t, alpha_gray) +GIL_DEFINE_BASE_TYPEDEFS(8s, int8_t, alpha_gray) +GIL_DEFINE_BASE_TYPEDEFS(16, uint16_t, alpha_gray) +GIL_DEFINE_BASE_TYPEDEFS(16s, int16_t, alpha_gray) +GIL_DEFINE_BASE_TYPEDEFS(32, uint32_t, alpha_gray) +GIL_DEFINE_BASE_TYPEDEFS(32s, int32_t, alpha_gray) +GIL_DEFINE_BASE_TYPEDEFS(32f, float32_t, alpha_gray) + +GIL_DEFINE_ALL_TYPEDEFS(8, uint8_t, gray_alpha) +GIL_DEFINE_ALL_TYPEDEFS(8s, int8_t, gray_alpha) +GIL_DEFINE_ALL_TYPEDEFS(16, uint16_t, gray_alpha) +GIL_DEFINE_ALL_TYPEDEFS(16s, int16_t, gray_alpha) +GIL_DEFINE_ALL_TYPEDEFS(32, uint32_t, gray_alpha) +GIL_DEFINE_ALL_TYPEDEFS(32s, int32_t, gray_alpha) +GIL_DEFINE_ALL_TYPEDEFS(32f, float32_t, gray_alpha) + +/// \ingroup ColorConvert +/// \brief Gray Alpha to RGBA +template <> +struct default_color_converter_impl<gray_alpha_t,rgba_t> { + template <typename P1, typename P2> + void operator()(const P1& src, P2& dst) const { + get_color(dst,red_t()) = + channel_convert<typename color_element_type<P2, red_t>::type>(get_color(src,gray_color_t())); + get_color(dst,green_t())= + channel_convert<typename color_element_type<P2, green_t>::type>(get_color(src,gray_color_t())); + get_color(dst,blue_t()) = + channel_convert<typename color_element_type<P2, blue_t>::type>(get_color(src,gray_color_t())); + get_color(dst,alpha_t()) = + channel_convert<typename color_element_type<P2, alpha_t>::type>(get_color(src,alpha_t())); + } +}; + +/// \brief Gray Alpha to RGB +template <> +struct default_color_converter_impl<gray_alpha_t,rgb_t> { + template <typename P1, typename P2> + void operator()(const P1& src, P2& dst) const { + get_color(dst,red_t()) = + channel_convert<typename color_element_type<P2, red_t>::type>( + channel_multiply(get_color(src,gray_color_t()),get_color(src,alpha_t()) ) + ); + get_color(dst,green_t()) = + channel_convert<typename color_element_type<P2, green_t>::type>( + channel_multiply(get_color(src,gray_color_t()),get_color(src,alpha_t()) ) + ); + get_color(dst,blue_t()) = + channel_convert<typename color_element_type<P2, blue_t>::type>( + channel_multiply(get_color(src,gray_color_t()),get_color(src,alpha_t()) ) + ); + } +}; + +/// \brief Gray Alpha to Gray +template <> +struct default_color_converter_impl<gray_alpha_t,gray_t> { + template <typename P1, typename P2> + void operator()(const P1& src, P2& dst) const { + get_color(dst,gray_color_t()) = + channel_convert<typename color_element_type<P2, gray_color_t>::type>( + channel_multiply(get_color(src,gray_color_t()),get_color(src,alpha_t()) ) + ); + } +}; + +} // namespace gil +} // namespace boost + +#endif // BOOST_GIL_EXTENSION_TOOLBOX_COLOR_SPACES_GRAY_ALPHA_HPP |