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 は実際はメモリがもったいないのでモノクロビットマップで
作るので、もうすこし複雑な話になりますが、
原理は同じです。
No.2
- 回答日時:
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
この処理で、描画先の色が残るということでしょうか
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
画面全体を再描画させたい
-
VB.netでのライン描画方法がわ...
-
MFC FormViewの背景色
-
GetGlyphOutline() ご利用経験...
-
word
-
TextBoxに文字を書いても表示さ...
-
VC++プログラムをつかったBMP画...
-
ワード2019 描画ツールの書式が...
-
WM_SIZEとWM_SIZINGの違い (Win...
-
VB6,リストボックスの特定行の...
-
Spreadで表全体を選択した場合...
-
OneNote 2010 文字と描画がずれる
-
UpdateData( FALSE); による文...
-
他のプロセスの描画領域を再描画
-
DirectXとGDIの違い
-
C++にて、塗りつぶされた円を描...
-
[VB.net] DataGridViewの列ヘッ...
-
WM_PAINT
-
OSX 仮想カメラ 作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
word
-
NVIDIAのシェーダーキャッシュ
-
InvalidateRectの使い方について
-
UpdateData( FALSE); による文...
-
CStaticコントロールの静的イメ...
-
CScrollViewの使用方法について
-
VB.netでのライン描画方法がわ...
-
VBAにGDI+を参照させる方法
-
この二つの違いは・・・?
-
Form1 Load で実行されない。
-
OneNote 2010 文字と描画がずれる
-
OnDrawが呼び出されません
-
C# ラバーバンドの描画を快適に...
-
コンボボックスの高さを変えたい
-
panelのスクロール表示について
おすすめ情報