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()
?)
如何以允许性能优化结果的方式做到这一点?
- 转换为最大可能的类型?听起来适得其反……
- 提供模板专业化库?有更好的主意吗?