【发布时间】:2011-08-15 16:45:07
【问题描述】:
boost::gil 的数字扩展包含这样的算法:
template <typename Channel1,typename Channel2,typename ChannelR>
struct channel_plus_t : public std::binary_function<Channel1,Channel2,ChannelR> {
ChannelR operator()(typename channel_traits<Channel1>::const_reference ch1,
typename channel_traits<Channel2>::const_reference ch2) const {
return ChannelR(ch1)+ChannelR(ch2);
}
};
当填充两个uint8通道值时,如果ChannelR也是uint8会发生溢出。
我认为计算应该
- 使用不同的类型进行处理(如何从模板化的通道类型派生出来?)
- 将结果剪辑到 ChannelR 类型的范围以获得饱和结果(使用
boost::gil::channel_traits<ChannelR>::min_value()/ ...max_value()?)
如何以允许性能优化结果的方式执行此操作?
- 转换为可能的最大类型?听起来适得其反……
- 提供模板专长库?有更好的主意吗?
【问题讨论】:
标签: c++ boost image-processing boost-gil