• ベストアンサー

 BitBltでの表示での問題です。

WindowsAPIでの描画系の質問です。 WindowsAPIで、bitmapファイルを描画するAPI、BitBltがあるのですが、 画像を読み込み、これを表示させると透過処理がないことがわかります。 そこでBitBltで、マスク処理した画像を用意し、表示させることで表示させたくない部分を 透明にさせることができるみたいですが、どうしてそういったことが可能なのでしょうか? bitmapファイルの黒い部分と別のbitmapファイルの白い部分を重ねることでできるのですが なぜ白と黒とで透明になるのか分かりません。 どうしてでしょうか? 以上です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>返信ありがとうございます。 >A = A AND M >D = D AND (Not M) >D = D OR A >この処理で、描画先の色が残るということでしょうか はい、描きたい場所の描画先は黒に 描きたく無い場所の描画元を黒にして OR で合成すればできあがりです。 M は実際はメモリがもったいないのでモノクロビットマップで 作るので、もうすこし複雑な話になりますが、 原理は同じです。

DEADSPACE566
質問者

お礼

自分も理解できました。 BitBltで画像合成をやるのでどうしてもこの謎を解きたかった のです。

その他の回答 (2)

回答No.2

BitBltは最後の引数でラスターオペレーションを指定できます。 このラスターオペレーションでマスク描画が実現できます。 ラスターオペレーションは描画先のピクセルの色値と描画元の ピクセルの色値を「ビット毎」の論理演算し、新たな描画先のピクセルの色値とします。 #正確にはさらにブラシを絡めることができます。 ・例えば、描画したいところを白、透明にしたいところところを黒にした  マスクビットマップを M ・描画するビットマップ A ・描画先を D とすれば #描画元、マスク、描画先は RGB形式を仮定してます。 A = A AND M D = D AND (Not M) D = D OR A と処理すればOKです。 MaskBlt を使うと若干楽ができます。

DEADSPACE566
質問者

お礼

返信ありがとうございます。 A = A AND M D = D AND (Not M) D = D OR A この処理で、描画先の色が残るということでしょうか

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

たぶんここらあたりの説明で理解可能かと。 http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%AF_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6) 質問の意図を読みはずしてるかもしれませんが。

DEADSPACE566
質問者

お礼

ありがとうございます。 とても参考になります。 ぱっと見、0、1でのマスク処理のことなんでしょうか