- ベストアンサー
BitBltでの表示での問題です。
WindowsAPIでの描画系の質問です。 WindowsAPIで、bitmapファイルを描画するAPI、BitBltがあるのですが、 画像を読み込み、これを表示させると透過処理がないことがわかります。 そこでBitBltで、マスク処理した画像を用意し、表示させることで表示させたくない部分を 透明にさせることができるみたいですが、どうしてそういったことが可能なのでしょうか? bitmapファイルの黒い部分と別のbitmapファイルの白い部分を重ねることでできるのですが なぜ白と黒とで透明になるのか分かりません。 どうしてでしょうか? 以上です。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>返信ありがとうございます。 >A = A AND M >D = D AND (Not M) >D = D OR A >この処理で、描画先の色が残るということでしょうか はい、描きたい場所の描画先は黒に 描きたく無い場所の描画元を黒にして OR で合成すればできあがりです。 M は実際はメモリがもったいないのでモノクロビットマップで 作るので、もうすこし複雑な話になりますが、 原理は同じです。
その他の回答 (2)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
BitBltは最後の引数でラスターオペレーションを指定できます。 このラスターオペレーションでマスク描画が実現できます。 ラスターオペレーションは描画先のピクセルの色値と描画元の ピクセルの色値を「ビット毎」の論理演算し、新たな描画先のピクセルの色値とします。 #正確にはさらにブラシを絡めることができます。 ・例えば、描画したいところを白、透明にしたいところところを黒にした マスクビットマップを M ・描画するビットマップ A ・描画先を D とすれば #描画元、マスク、描画先は RGB形式を仮定してます。 A = A AND M D = D AND (Not M) D = D OR A と処理すればOKです。 MaskBlt を使うと若干楽ができます。
お礼
返信ありがとうございます。 A = A AND M D = D AND (Not M) D = D OR A この処理で、描画先の色が残るということでしょうか
- osamuy
- ベストアンサー率42% (1231/2878)
たぶんここらあたりの説明で理解可能かと。 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) 質問の意図を読みはずしてるかもしれませんが。
お礼
ありがとうございます。 とても参考になります。 ぱっと見、0、1でのマスク処理のことなんでしょうか
お礼
自分も理解できました。 BitBltで画像合成をやるのでどうしてもこの謎を解きたかった のです。