« 画像コピーにイテレーターを使うかどうか | メイン | イテレーターを取らないときの問題 »

2007年08月01日

グラフィックライブラリ:: ピクセルを処理する関数オブジェクト

    

ピクセルを処理する関数オブジェクトは、いくつかの種類に分けたほうが良さそうだ。
たとえば、カラーキーのようなフィルタとして働く関数オブジェクトの場合、フィルタリングされれば以降の処理は省ける。
dest = func2( dest, func1( dest, src ) );のように重ねて書くことも出来るが、フィルタリングされた後の処理は無駄になる。
if( mask(dest,src) ) dest = func( dest, src ); のような形にして、フィルタリングするような関数オブジェクトは別にしたほうが良さそうだ。
maskが常にtrueを返すと最適化で分岐が消えることも期待できるので、2つ似たようなのを書く必要はなくなるかもしれない。
でも、入出力を見てフィルタリングするような処理はカラーキーぐらいかも。

他には入力、出力位置を変えるもの。
ブラーや置換マップのような処理は、現在のXY座標以外を参照してピクセル値を返す。
そもそも、イテレーターを引数に取らないのであれば、これは別にするしかない。
VIGRA のアクセサに当たるものになると思う。

関数オブジェクトの重ね合わせはバインダーを使えばいいだけで簡単に出来るはず。
bind1stのようなもので2引数をとるのが既にあるのかどうかは知らないが。



投稿者 Takenori : 2007年08月01日 02:20




comments powered by Disqus
Total : Today : Yesterday : なかのひと