|
Boost : |
Subject: Re: [boost] [GIL] kth_channel_view
From: fabien.castan_at_[hidden]
Date: 2010-06-24 08:31:01
>A good example of using kth_channel_view is this:
>
> rgb8_image_t img( 100, 100 );
> typedef typename kth_channel_view_type< 0, const rgb8_view_t>::type view_t;
> view_t first = kth_channel_view<0>( const_view( img ));
Another interesting possibility is:
typedef kth_channel_view_type< 0, const rgb8_view_t> KthChannelView;
typename KthChannelView::type first = KthChannelView::make( const_view(img) );
It can be a good thing to directly use channel type, like this:
typedef channel_view_type< red_t, const rgb8_view_t>::type view_t;
view_t first = channel_view<red_t>( const_view( img ));
I have written some code to do that, based on kth_channel_view_type. It's maybe intersting to include in gil.
Regards,
Fabien
namespace boost {
namespace gil {
template <typename Channel, typename View>
struct channel_type_to_index
{
static const int value = gil::detail::type_to_index<
typename color_space_type<View>::type, // color (mpl::vector)
Channel // channel type
>::type::value; //< index of the channel in the color (mpl::vector)
};
template <typename Channel, typename View>
struct channel_view_type : public kth_channel_view_type<channel_type_to_index<Channel,View>::value, View>
{
static const int index = channel_type_to_index<Channel,View>::value;
typedef kth_channel_view_type<index, View> parent_t;
typedef typename parent_t::type type;
static type make(const View& src) { return parent_t::make(src); }
};
/// \ingroup ImageViewTransformationsKthChannel
template <typename Channel, typename View>
typename channel_view_type<Channel,View>::type channel_view(const View& src)
{
return channel_view_type<Channel,View>::make(src);
}
}}
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk