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

C++ 如何从Boost::GIL视图类型中提取通道类型?,c++,boost,boost-gil,C++,Boost,Boost Gil,我找不到从图像视图中提取像素或通道类型的正确方法。我希望在gray8\u视图中,将下面的pod\u t定义为“unsigned char”。没有简单的ViewType::pixel\t。在函数PixelFoo中,这种类型的正确定义是什么 template<class ViewType> void PixelFoo(ViewType v) { typedef typename ViewType::x_iterator::value_type::

我找不到从图像视图中提取像素或通道类型的正确方法。我希望在gray8\u视图中,将下面的pod\u 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);
    }
模板
void PixelFoo(视图类型v)
{
typedef typename ViewType::x_迭代器::值_type::channel_t pod_t;
pod_t maxVal=通道特征::最大值();
pod_t podVal=v(0,0);//预期emptyView出现错误
}
void PixelBar()
{
灰色8_视图_temptyview;
PixelFoo(emptyView);
}

这是我目前的工作,但我确信有一种方法可以达到我需要的类型

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;
};
模板
结构视图;
样板
结构视图{
类型定义比特8信道;
};
样板
结构视图{
类型定义比特16信道;
};
样板
结构视图{
typedef双通道;
};

这是我目前的工作,但我确信有一种方法可以达到我需要的类型

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;
};
模板
结构视图;
样板
结构视图{
类型定义比特8信道;
};
样板
结构视图{
类型定义比特16信道;
};
样板
结构视图{
typedef双通道;
};

ViewType::value\u type
应该与您期望的
ViewType::pixel\u t
相似

然后,对于同质像素类型,来自同质PixelBasedConcept的
channel_type::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
}
模板
void PixelFoo(视图类型v)
{
typedef typename boost::gil::channel_type::type pod_t;
pod_t maxVal=通道特征::最大值();
pod_t podVal=v(0,0);//预期emptyView出现错误
}

ViewType::value\u type
应该与您期望的
ViewType::pixel\u t
相似

然后,对于同质像素类型,来自同质PixelBasedConcept的
channel_type::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
}
模板
void PixelFoo(视图类型v)
{
typedef typename boost::gil::channel_type::type pod_t;
pod_t maxVal=通道特征::最大值();
pod_t podVal=v(0,0);//预期emptyView出现错误
}