Eloi, this would be my solution. Wording might be a little off but I'm
sure you'll get the idea:
#include
using namespace std;
using namespace boost;
using namespace gil;
template< typename Data, int N > struct black_pixel_factory {
BOOST_STATIC_ASSERT(( false )); };
template< typename Data > struct black_pixel_factory< Data, 1 >
{
typedef pixel< Data, devicen_layout_t< 1 > > pixel_t;
static const pixel_t black() { return pixel_t( 0 ); }
};
template< typename Data > struct black_pixel_factory< Data, 2 >
{
typedef pixel< Data, devicen_layout_t< 2 > > pixel_t;
static const pixel_t black() { return pixel_t( 0, 0 ); }
};
template< typename Data > struct black_pixel_factory< Data, 3 >
{
typedef pixel< Data, devicen_layout_t< 3 > > pixel_t;
static const pixel_t black() { return pixel_t( 0, 0, 0 ); }
};
template< typename Data > struct black_pixel_factory< Data, 4 >
{
typedef pixel< Data, devicen_layout_t< 4 > > pixel_t;
static const pixel_t black() { return pixel_t( 0, 0, 0, 0 ); }
};
template< typename Data > struct black_pixel_factory< Data, 5 >
{
typedef pixel< Data, devicen_layout_t< 5 > > pixel_t;
static const pixel_t black() { return pixel_t( 0, 0, 0, 0, 0 ); }
};
template< typename View >
void foo( const View& dst )
{
typedef pixel
comp_pixel_t;
typedef image
comp_image_t;
typedef typename view_type_from_pixel::type comp_view_t;
typedef typename comp_view_t::x_iterator tmp_iterator;
typedef black_pixel_factory< bits32f, num_channels<View>::value >
black_pixel_factory_t;
typename black_pixel_factory_t::pixel_t black =
black_pixel_factory_t::black();
comp_image_t itmp( dst.dimensions( ) );
comp_view_t tmpv( view( itmp ) );
fill_pixels( tmpv, black);
return;
}
int main()
{
rgb32f_image_t img;
foo( view( img ));
return 0;
}
Christian