diff options
Diffstat (limited to 'boost/gil/extension/io/bmp/detail/supported_types.hpp')
-rw-r--r-- | boost/gil/extension/io/bmp/detail/supported_types.hpp | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/boost/gil/extension/io/bmp/detail/supported_types.hpp b/boost/gil/extension/io/bmp/detail/supported_types.hpp new file mode 100644 index 0000000000..89765594aa --- /dev/null +++ b/boost/gil/extension/io/bmp/detail/supported_types.hpp @@ -0,0 +1,150 @@ +/* + Copyright 2008 Christian Henning + 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_IO_BMP_DETAIL_SUPPORTED_TYPES_HPP +#define BOOST_GIL_EXTENSION_IO_BMP_DETAIL_SUPPORTED_TYPES_HPP + +//////////////////////////////////////////////////////////////////////////////////////// +/// \file +/// \brief +/// \author Christian Henning \n +/// +/// \date 2008 \n +/// +//////////////////////////////////////////////////////////////////////////////////////// + +#include <boost/mpl/not.hpp> +#include <boost/type_traits/is_same.hpp> + +#include <boost/gil/channel.hpp> +#include <boost/gil/color_base.hpp> +#include <boost/gil/bit_aligned_pixel_reference.hpp> +#include <boost/gil/packed_pixel.hpp> + +#include <boost/gil/io/base.hpp> + + +namespace boost { namespace gil { namespace detail { + +// Read support + +template< typename Channel + , typename ColorSpace + > +struct bmp_read_support : read_support_false +{ + static const bmp_bits_per_pixel::type bpp = 0; +}; + +template< typename BitField + , bool Mutable + > +struct bmp_read_support< packed_dynamic_channel_reference< BitField + , 1 + , Mutable + > + , gray_t + > : read_support_true +{ + static const bmp_bits_per_pixel::type bpp = 1; +}; + +template< typename BitField + , bool Mutable + > +struct bmp_read_support< packed_dynamic_channel_reference< BitField + , 4 + , Mutable + > + , gray_t + > : read_support_true +{ + static const bmp_bits_per_pixel::type bpp = 4; +}; + + +template<> +struct bmp_read_support<uint8_t + , gray_t + > : read_support_true +{ + static const bmp_bits_per_pixel::type bpp = 8; +}; + + + +template<> +struct bmp_read_support<uint8_t + , rgb_t + > : read_support_true +{ + static const bmp_bits_per_pixel::type bpp = 24; +}; + + +template<> +struct bmp_read_support<uint8_t + , rgba_t + > : read_support_true +{ + static const bmp_bits_per_pixel::type bpp = 32; +}; + + +// Write support + +template< typename Channel + , typename ColorSpace + > +struct bmp_write_support : write_support_false +{}; + +template<> +struct bmp_write_support<uint8_t + , rgb_t + > : write_support_true {}; + +template<> +struct bmp_write_support<uint8_t + , rgba_t + > : write_support_true {}; + +} // namespace detail + + +template< typename Pixel > +struct is_read_supported< Pixel + , bmp_tag + > + : mpl::bool_< detail::bmp_read_support< typename channel_type< Pixel >::type + , typename color_space_type< Pixel >::type + >::is_supported + > +{ + typedef detail::bmp_read_support< typename channel_type< Pixel >::type + , typename color_space_type< Pixel >::type + > parent_t; + + static const typename bmp_bits_per_pixel::type bpp = parent_t::bpp; +}; + +template< typename Pixel > +struct is_write_supported< Pixel + , bmp_tag + > + : mpl::bool_< detail::bmp_write_support< typename channel_type< Pixel >::type + , typename color_space_type< Pixel >::type + >::is_supported + > {}; + +} // namespace gil +} // namespace boost + + +#endif |