我无法找到从图像视图中提取像素或通道类型的正确方法。我想在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);
}
答案 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
}