
Hello there, I try to write a generic floyd steinberg implementation using boost.gil. Within that I have to compute the error the color conversion. So I thought that I simply have to take a signed version of the pixel type, and compute the difference between the original and converted pixel. This operation is supposed to compute the error: template<typename CT> struct calc_error { template <typename Out, typename T> CT operator()(const Out& in1, const T& orig) const { return orig - in1; } }; Inside the algorithm I do the following: typedef typename channel_type<OriginalView>::type channel_t; typedef typename channel_convert_to_signed<channel_t>::type signed_channel_t; typedef boost::gil::pixel< signed_channel_t, typename OriginalView::value_type::layout_t > error_pixel_t; But somehow singed_channel_t is still unsigned char if an rgb8 image is passed to the method. Which causes problems in the second stage of the algorithm where these always positive values are added to the channels. error_pixel_t error; static_transform(*conv_it, *orig_it, error, calc_error<signed_channel_t>()); //.... Regards Andreas Pokorny