【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

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

以上です。
よろしくお願いします。

A 回答 (3件)

>返信ありがとうございます。


>A = A AND M
>D = D AND (Not M)
>D = D OR A
>この処理で、描画先の色が残るということでしょうか

はい、描きたい場所の描画先は黒に
描きたく無い場所の描画元を黒にして
OR で合成すればできあがりです。

M は実際はメモリがもったいないのでモノクロビットマップで
作るので、もうすこし複雑な話になりますが、
原理は同じです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/26 13:38

BitBltは最後の引数でラスターオペレーションを指定できます。


このラスターオペレーションでマスク描画が実現できます。

ラスターオペレーションは描画先のピクセルの色値と描画元の
ピクセルの色値を「ビット毎」の論理演算し、新たな描画先のピクセルの色値とします。
#正確にはさらにブラシを絡めることができます。


・例えば、描画したいところを白、透明にしたいところところを黒にした
 マスクビットマップを M
・描画するビットマップ A
・描画先を D とすれば
#描画元、マスク、描画先は RGB形式を仮定してます。


A = A AND M
D = D AND (Not M)
D = D OR A

と処理すればOKです。

MaskBlt を使うと若干楽ができます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/16 00:33

たぶんここらあたりの説明で理解可能かと。



http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9% …

質問の意図を読みはずしてるかもしれませんが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/16 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!