■ピクチャー転送の定番API

素材グラフィックスを格納するピクチャボックスと、実際に画面として表示するピクチャボックスを用意したら、登竜門である自作のパターンを画面に表示する準備が整ったことになる。すなわち、素材用ピクチャボックスから表示用ピクチャボックスへ、表示したいパターンを転送すればよいのだ。利用するのは、APIのBitBlt関数である。




まずは、このように宣言をしておく。もちろん、最初からすべての内容を把握しようなどと張り切ることはない。見よう見マネで扱っていれば、そのうち自然に使いこなせるようになってしまうものなのだ。とはいえ、ここでの使命としていちおうは内容を示しておかねばなるまい。

・hdc:コピー先デバイスコンテキスト(ハンドル)
・X,Y:コピー先の左上座標
・nWidth:コピーする幅
・nHeight:コピーする高さ
・hSrcDC:コピー元デバイスコンテキスト(ハンドル)
・XSrc,YSrc:コピー元の左上座標
・dwRop:コピー時のラスタ操作

一言でいうならば、これはピクチャボックスからピクチャボックスへ矩形をコピー転送する関数だ。各パラメータのうち、ピクチャボックスを指定するハンドルは、ピクチャボックスのhdcプロパティとして簡単に取得できる。また、座標とサイズについてはあえて説明するまでもないだろう。キーポイントとなっているのは、コピー時のラスタ操作だ。今回は、初見参ということで主要な3種類の操作についてPublic指定したが、これ以外のものについては必要に応じて対処していきたい。もちろん、拙著やAPIの専門書で事前に勉強しておいても損はないゾ!

ということで、キーポイントの解説に移ろう。ラスタ操作とは、画像転送時になされる一種の演算処理のこと。この機能がなかったら、画像加工はすべてドット単位に自前プログラムで処理しなければならない。これは、面倒というよりも時間がかかり過ぎるのが問題だ。ラスタ操作ならば、ハードウェアで処理されるので瞬時完了。まさに、ゲーム制作のカギを握っているキーポイントといえるだろう。ちなみに、今回示したラスタ操作の内容は次のようなものである。

@ SrcCopy:コピー元画像をコピー先にそのまま転送する。
A SrcPaint:コピー元画像とコピー先画像のORを取って転送する。
B SrcAnd:コピー元画像とコピー先画像のANDを取って転送する。

そのまま転送する@はともかく、AとBについては初心者にとっては理解し難いかもしれない。しかし、すでに当道場では「データと論理演算」でORもANDも解説済み。要するに、カラーを示すドット別の数値データが、ここでの論理演算の対象となっているのだ。しかし、これを「何色が何色になる」という観点から使いこなそうとすると、とてもじゃないがワケがわからなくなってしまう。つまり、色変化の事実に沿った目的があって、初めてラスタ操作の価値が出てくるというわけである。果たして、その具体的な目的とは……。