如何从Boost :: GIL视图类型中提取通道类型?

时间:2011-07-26 17:01:25

标签: c++ boost boost-gil

我无法找到从图像视图中提取像素或通道类型的正确方法。我想在gray8_view_t的情况下将下面的pod_t定义为'unsigned char'。没有简单的ViewType :: pixel_t。在PixelFoo函数中这种类型的正确定义是什么?

    template<class ViewType> 
    void PixelFoo(ViewType v)
    {
        typedef typename ViewType::x_iterator::value_type::channel_t pod_t;
        pod_t maxVal = channel_traits<pod_t>::max_value();
        pod_t podVal = v(0, 0); //expect error with emptyView
    }
    void PixelBar()
    {
        gray8_view_t emptyView;
        PixelFoo(emptyView);
    }

2 个答案:

答案 0 :(得分:0)

这是我当前的工作,但我确信有一个提供的方法来获得我需要的类型。

template<class DestView>
struct view_traits;
template<>
struct view_traits<gray8_view_t> {
    typedef bits8 channel_t;
};
template<>
struct view_traits<gray16_view_t> {
    typedef bits16 channel_t;
};
template<>
struct view_traits<gray64f_view_t> {
    typedef double channel_t;
};

答案 1 :(得分:0)

ViewType::value_type应该与您预期的ViewType::pixel_t类似。

然后,对于同类像素类型,来自HomogeneousPixelBasedConcept的channel_type<T>::type应该会导致您正在寻找的类型:

template<class ViewType> 
void PixelFoo(ViewType v)
{
    typedef typename boost::gil::channel_type<typename ViewType::value_type>::type pod_t;
    pod_t maxVal = channel_traits<pod_t>::max_value();
    pod_t podVal = v(0, 0); //expect error with emptyView
}