Hi Eloi,
I'm doing some testing and indeed there is something wrong. The
following test doesn't work for the alpha channel of the
rgba10_pixel_t:
#include
using namespace boost;
using namespace gil;
int main()
{
typedef bit_aligned_pixel_reference< uint32_t
, mpl::vector4_c
, rgba_layout_t
, true
> rgba7_ref_t;
typedef bit_aligned_pixel_iterator< rgba7_ref_t > rgba7_ptr_t;
typedef std::iterator_traits< rgba7_ptr_t >::value_type rgba7_pixel_t;
typedef bit_aligned_pixel_reference< uint32_t
, mpl::vector4_c
, rgba_layout_t
, true
> _rgba8_ref_t;
typedef bit_aligned_pixel_iterator< _rgba8_ref_t > _rgba8_ptr_t;
typedef std::iterator_traits< _rgba8_ptr_t >::value_type _rgba8_pixel_t;
typedef bit_aligned_pixel_reference< uint64_t
, mpl::vector4_c
, rgba_layout_t
, true
> rgba10_ref_t;
// A mutable iterator over RGBA10 pixels
typedef bit_aligned_pixel_iterator< rgba10_ref_t > rgba10_ptr_t;
typedef std::iterator_traits< rgba10_ptr_t >::value_type rgba10_pixel_t;
rgba7_pixel_t src_7( 20, 30, 40, 50 );
uint16_t r_7 = get_color( src_7, red_t() );
uint16_t g_7 = get_color( src_7, green_t() );
uint16_t b_7 = get_color( src_7, blue_t() );
uint16_t a_7 = get_color( src_7, alpha_t() );
_rgba8_pixel_t src_8( 20, 30, 40, 50 );
uint16_t r_8 = get_color( src_8, red_t() );
uint16_t g_8 = get_color( src_8, green_t() );
uint16_t b_8 = get_color( src_8, blue_t() );
uint16_t a_8 = get_color( src_8, alpha_t() );
rgba10_pixel_t src_10( 20, 30, 40, 50 );
uint16_t r_10 = get_color( src_10, red_t() );
uint16_t g_10 = get_color( src_10, green_t() );
uint16_t b_10 = get_color( src_10, blue_t() );
uint16_t a_10 = get_color( src_10, alpha_t() );
return 0;
}
Looking at the packed_pixel's _bitfield member reveals that the it's
value is way off.
I'll keep investigating the issue.
Regards,
Christian