Как извлечь тип канала из типа представления Boost :: GIL? - PullRequest
2 голосов
/ 26 июля 2011

Я не могу найти правильный способ извлечь пиксель или тип канала из вида изображения. Я ищу определение pod_t ниже как «unsigned char» в случае gray8_view_t. Нет простого 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 голосов
/ 16 августа 2011

ViewType::value_type должно быть похоже на то, что вы ожидали ViewType::pixel_t.

Затем, для однородных типов пикселей, channel_type<T>::type из HomogenePixelBasedConcept должен привести к типу, который вы ищете:

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
}
0 голосов
/ 26 июля 2011

Это моя текущая работа, но я уверен, что есть предоставленный метод, чтобы добраться до нужного мне типа.

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;
};
...