VBとGIFとBitBltと

VB6もBitBltもそろそろ過去のものになりつつあるように感じられます。しかし、新しい開発環境に移行するつもりが今のところはないのでこのまま続けさせてもらいます。
今回は、VB6で、透過色を持つGIF画像を、BitBltにより、透過情報が有効な状態で描画する方法を、できるだけ少ないコード量で実現することを考えてみます

まず、BitBltを使うためにはVB6ではPictureBoxをよく使用します。
今回、BitBltによる画像効果と逆の方法で透過転送を試みるので、ソースとマスクの色は逆にしておきます。元となるGIF画像を入れておくPictureBoxと、黒背景のソースを入れておくPictureBoxと、白背景のマスクを入れておくPictureBoxの3つを用意します。もちろん描画先のPictureBoxも忘れずに。

つまり、元となるGIF画像から、黒背景のソースと、白背景のマスクを作ればいいわけです。
とりあえず、それぞれの色を背景にしたPictureBoxのPictureにGIF画像を設定してやれば、黒背景の画像と、白背景の画像が、出来上がります。
さて、黒背景のソースはできたので、あとは白背景の画像から白背景のマスクを作ればいいわけです。
そのためには、黒背景の画像を、白背景の画像に、SRCINVERTで重ね合わせるのです。
SRCINVERTで重ね合わせると、全く同じ色は黒に、全く正反対の色は白になるのです(環境によってはうまくいかないかも)。
こうやってできた黒背景のソースと、白背景のマスクを、それぞれSRCANDとSRCPAINTで描画先に送り込むわけです。
プログラムとしては9行でできるので結構手軽かも。

サンプル(37.6kilobyte)