- ベストアンサー
ActiveBasic透過画像の作り方
- ゲーム開発で背景を透過した画像を作成する方法について教えてください。
- 透過画像を作成する関数の処理に問題があり、透過が正しく処理されません。
- BitBlt関数のSRCANDとSRCPAINTの使い方に問題がある可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
HBITMAPには透明色がありません。 以下の行ではデフォルトの黒で塗りつぶされたビットマップが作成されています。 hCompBmp=CreateCompatibleBitmap(hDC,bmp.bmWidth,bmp.bmHeight) そのうえで、キチンと透過処理をしてhCompDCにキャラクタを描画しています。 BitBlt(hCompDC,0,0,bmp.bmWidth,bmp.bmHeight,hMaskDC,0,0,SRCAND) BitBlt(hCompDC,0,0,bmp.bmWidth,bmp.bmHeight,hBaseDC,0,0,SRCPAINT) ただし、黒で塗りつぶされたビットマップ上に透過処理を施しても、背景黒の上にキャラクターが乗っているだけ。 見た目は背景を黒くしたもの(hBaseDC)と同じ、意味ねぇ!!って事ですね。 最終的に捨ててしまっている、hMaskDCとhBaseDCを保存しておいて、キャラクタを表示したい場面でラスタオペレーションで透過処理をするべきですかね。 http://zahyou.hp.infoseek.co.jp/cgame/transparent.htm http://homepage1.nifty.com/CavalierLab/lab/win/transparent.html 最初から対象OSをWindows2000以降限定にして、TransparentBltを使うとか。 http://msdn.microsoft.com/ja-jp/library/cc428776.aspx ※何をしているかソースコード内にコメント入れましょうよ。
その他の回答 (1)
- BellBell
- ベストアンサー率54% (327/598)
>マスク作って、合成して行くしかないですかね・・・ 私個人は、VB2の頃からのVBプログラマなんでマスク作ってラスタオペレーションを使って、自前ですべての描画処理ってのは好きなんですけど、やっぱ今の主流で言えばゲーム作るならDirectXじゃないですかね? それならマスク作る必要ないですし、簡単に全画面表示に切り替えられますし。 ジョイパッド(ジョイスティック)に対応することも簡単。 描画も早いですし。 事実上のゲーム用のライブラリとしてせっかく用意されているのだから、使わにゃ損って感じですかね?
お礼
ご回答ありがとうございます。 コメントの件、すいません。 テストで作っていたもので、コメントをいれずにやっていました。 申し訳ないです。 >HBITMAPには透明色がありません。 >最終的に捨ててしまっている、hMaskDCとhBaseDCを保存しておいて、 >キャラクタを表示したい場面でラスタオペレーションで透過処理をするべきですかね。 ということは、やはり、透過したものを確保しておくのは無理ですか・・・ マスク作って、合成して行くしかないですかね・・・