inline void smart_convert_color(T src, Pixel<U, ColorSpace>& dst) { double double_src; Pixel<double, ColorSpace> double_dst; convert_channel(src, double_src); convert_color(double_src, double_dst); convert_channel<double, U, ColorSpace>(double_dst, dst); }
inline void smart_convert_color(const Pixel<T, ColorSpace>& src, U& dst) { Pixel<double, ColorSpace> double_src; double double_dst; convert_channel<T, double, ColorSpace>(src, double_src); convert_color(double_src, double_dst); convert_channel(double_dst, dst); }
int add_reading(int ch, int value) { /* double last = 0.0; */ double cur, val; if ((value >= 0) && (value < 1024)) { cntr[ch][value]++; /* accum[ch] += convert_to_mv(value); */ cur = convert_to_mv(value); val = convert_channel(ch, cur, last_reading); last_reading = val; accum[ch] += val; acc_cnt[ch]++; return(0); } return(-1); }
inline void convert_channel(const Pixel<T, ColorSpace>& src, Pixel<U, ColorSpace>& dst) { for (int i = 0; i < ColorSpace::size; ++i) convert_channel(src[i], dst[i]); }
inline void convert_channel(const Matrix<T, N, 1>& src, Matrix<U, N, 1>& dst) { for (int i = 0; i < N; ++i) convert_channel(src[i], dst[i]); }
static inline void apply(const Pixel<float, ColSpace>& src, Pixel<T, ColSpace>& dst) { for (auto i = 0; i < src.size(); ++i) convert_channel(src[i], dst[i]); }
inline void smart_convert_color(SrcGray src, DstGray& dst) { static_assert(!std::is_same<SrcGray, DstGray>::value, "Source and destination grayscale types cannot be identical"); convert_channel(src, dst); }
inline void smart_convert_color(const Pixel<double, ColorSpace>& src, T& dst) { double double_dst; convert_color(src, double_dst); convert_channel(double_dst, dst); }