BitBlt(応用編)

基本編もやっていないのにいきなり応用編です。(^^
一応基本は次の一行です。

BltBlt(転送先 hDC, x, y, 転送する幅, 転送する高さ, 転送元 hDC, x, y, 転送方法)

知らないとは言わせません(知らない人は何も言わず覚えてね)。

で、何を応用するのかというと、普通転送方法のところは
SRCCOPY(=0xCC0020)、SRCAND(=0x8800C6)、SRCPAINT(=0xEE0086)
の三つくらいしか使いません。
普通にBitBltを使うだけであればこれだけで充分です。
応用編ではこの三つ以外も使っていろんな効果を作ります。

では、これから応用編の転送方法の説明を
・・・・したかったのですが面倒なのでここではしません。
実際の使い方は下のサンプルをダウンロードして自分で確かめてください。

やや不真面目なVB用サンプル(23.9kilobyte)
もうちょっとわかりやすいVB用サンプル(6.44kilobyte)(03/07/24追加)

02/05/25 追加分

面倒だから説明しないと言うのはあまりに勝手なような気がするので説明していきます。
ソース マスクまず使いたい絵とマスクを用意します。
今回はサンプルに入っている絵の半分サイズを使います。
マスクと背景の色はこれと同じにしておくといいかもしれません。
白抜き 通常の透過転送とりあえずはじめに普通の透過転送を試みます。
背景の上にマスク画像をSRCPAINTで転送すれば絵をはめ込む場所が白く抜けます(図の左側)。
そこにソース画像をSRCANDで転送すれば見事に透過転送をすることができます(図の右側)。
赤く光る図 赤いマスクさて、ここから応用編です。
今回は赤く光らせてみましょう。
そのためにはマスクの白い部分を赤くした画像を使います。
そんなものは普通用意されていないので、適当なHDCの上に作ることになります(HDCってわかりますよね)。
赤く塗り潰されたHDCの上にマスクをSRCANDで転送します。
あとはそれを普通に透過転送した画像の上にSRCPAINTで重ねるだけです。
赤いが暗い図 赤く反転したマスク次は赤く暗くしてみましょう。
また今度も適当なHDCにマスクを加工したものを作るのですが、透過部分を白くする必要があるので、赤く塗り潰されたHDCにMERGEPAINT(=0xBB0226)で色を反転してからORで合成します。
そしてそれをSRCANDで目的の画像の上に重ねます。
失敗図1 失敗図2ここに書いたことは、他の色でもできますが、純色(色の各成分が255か0)を使わないとうまくいかないことがあります。
左図は赤の成分を128にしたものです。
どうしてもいろんな色と混ぜたいのならDIBなりDirectXなりを使ってアルファブレンドするとよいでしょう。