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);
}
};
2つのuint8チャネル値で埋められた場合、ChannelRもuint8の場合、オーバーフローが発生します。
計算はすべきだと思います
- 処理に別のタイプを使用します(テンプレート化されたチャネルタイプからこれを導出する方法は?)
- 結果をChannelRタイプの範囲にクリップして、飽和した結果を取得します(
boost::gil::channel_traits<ChannelR>::min_value()
/ ...max_value()
?を使用)
パフォーマンスを最適化した結果を可能にする方法でこれを行うにはどうすればよいですか?
- 可能な限り最大のタイプに変換しますか?逆効果に聞こえます...
- テンプレートの専門分野の武器を提供しますか?より良いアイデアはありますか?