« SQLiteのExtension | メイン | GDI を考える »

2007年07月13日

グラフィックライブラリ:: 矩形コピー

    

とりあえずは、矩形コピーが出来て、その時に拡大縮小とアルファブレンド、回転、カラーキーによる抜きが出来ればいい。

MIST を見てみたが、 CopyRect のようなものは見当たらない。
VIGRAcopyImage で出来るようだ。
拡縮や回転も出来るよう。
コピーなどでは右上と左下のイテレータを渡して矩形を指定している。
アルファブレンドはアクセサを作れば出来そう。
アクセサ は、src と dest にあり、イテレーターから値を読む、もしくは書き込むためにあり、デフォルトでは単純にコピーしているだけだ。
アルファブレンドを実現しようとしたら、この src と dest の両方を作らないと出来ない。 src 側でブレンド率をかけて、dest 側では加算するようにしないといけない。
カラーキーは、mask と言うプレディケート + イテレーターで出来そうだが、mask 用のイテレーターが別になっているので、イテレーターに工夫の必要がありそう。本来はマスク画像を指定するものと思われる。
ざっとソースとドキュメント見ただけなので、もっと効率的なやり方があるのかもしれないが、自分の用途では回りくどいな。
単純に関数オブジェクト渡して、それで src と dest を加工出来れば楽なのに。

ところで、MIST でも、VIGRA でも出てきたが kernel とはなんだろう?
何らかのフィルターをかける時に核として使われるような雰囲気だが、よくわからない。

知らなかったけど、GDI には回転用の API に PlgBlt とかあったのか。
と言うことは、これらを組み合わせれば、とりあえず目的は達成できるのか。
まあ、いろいろ組み合わせる場合はテンポラリに何度もコピーしないといけないので、重そうだけど。
・BitBlt
・StretchBlt(拡縮)
・TransparentBlt(透過)
・AlphaBlend(アルファブレンド)
・PlgBlt(回転)
( 参考 : Windowsプログラミング・ビットマップ描画 )

とりあえず必要なのは GDI で実装して、重いだろうから後のことを考えて自分で作っていくかな。
高度なことは MIST や VIGRA へのアダプタを作り、相互にイメージを変換できれば両方が持つ機能を実現できる。
後、大体は C++ Builder で作るので、TBitmap 用のも必要。



投稿者 Takenori : 2007年07月13日 12:11




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