104 lines
3.3 KiB
C++
104 lines
3.3 KiB
C++
/*
|
|
Copyright 2007-2008 Andreas Pokorny, 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_DETAIL_CONVERSION_POLICIES_HPP
|
|
#define BOOST_GIL_EXTENSION_IO_DETAIL_CONVERSION_POLICIES_HPP
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
/// \file
|
|
/// \brief
|
|
/// \author Andreas Pokorny, Christian Henning \n
|
|
///
|
|
/// \date 2007-2008 \n
|
|
///
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include <algorithm>
|
|
#include <iterator>
|
|
#include <boost/gil/image_view_factory.hpp>
|
|
|
|
namespace boost{namespace gil{ namespace detail {
|
|
|
|
struct read_and_no_convert
|
|
{
|
|
public:
|
|
typedef void* color_converter_type;
|
|
|
|
template< typename InIterator
|
|
, typename OutIterator
|
|
>
|
|
void read( const InIterator& /* begin */
|
|
, const InIterator& /* end */
|
|
, OutIterator /* out */
|
|
, typename disable_if< typename pixels_are_compatible< typename std::iterator_traits<InIterator>::value_type
|
|
, typename std::iterator_traits<OutIterator>::value_type
|
|
>::type
|
|
>::type* /* ptr */ = 0
|
|
)
|
|
{
|
|
io_error( "Data cannot be copied because the pixels are incompatible." );
|
|
}
|
|
|
|
template< typename InIterator
|
|
, typename OutIterator
|
|
>
|
|
void read( const InIterator& begin
|
|
, const InIterator& end
|
|
, OutIterator out
|
|
, typename enable_if< typename pixels_are_compatible< typename std::iterator_traits<InIterator>::value_type
|
|
, typename std::iterator_traits<OutIterator>::value_type
|
|
>::type
|
|
>::type* /* ptr */ = 0
|
|
)
|
|
{
|
|
std::copy( begin
|
|
, end
|
|
, out
|
|
);
|
|
}
|
|
|
|
};
|
|
|
|
template<typename CC>
|
|
struct read_and_convert
|
|
{
|
|
public:
|
|
typedef CC color_converter_type;
|
|
CC _cc;
|
|
|
|
read_and_convert( color_converter_type const& cc )
|
|
: _cc(cc) {}
|
|
|
|
template< typename InIterator
|
|
, typename OutIterator
|
|
>
|
|
void read( const InIterator& begin
|
|
, const InIterator& end
|
|
, OutIterator out
|
|
)
|
|
{
|
|
typedef color_convert_deref_fn< typename std::iterator_traits<InIterator>::reference
|
|
, typename std::iterator_traits<OutIterator>::value_type //reference?
|
|
, CC
|
|
> deref_t;
|
|
|
|
std::transform( begin
|
|
, end
|
|
, out
|
|
, deref_t( _cc )
|
|
);
|
|
}
|
|
};
|
|
|
|
} // namespace detail
|
|
} // namespace gil
|
|
} // namespace boost
|
|
|
|
#endif // BOOST_GIL_EXTENSION_IO_DETAIL_CONVERSION_POLICIES_HPP
|