C++ 図形透明
Re:C++ 図形透明
> 開発環境はVC++6.0みたいですが、MFCですか?
そうです。MFC AppWizard(exe) のダイアログベースです。
よろしくお願いします。
そうです。MFC AppWizard(exe) のダイアログベースです。
よろしくお願いします。
Re:C++ 図形透明
例えば…ですが。
1:画面を一旦クリアする。(今回の場合は数字の6を描画する)
2:1の画像の上に描画したい画像(今回の場合は円)のマスク画像を用意する(背景…黒、円…RGB(0x88, 0x88, 0x88)くらい?)
3:Bitblt関数で1と2の論理和(SRCPAINT)で転送する
4:Bitblt関数で3の画像と描画したい画像(背景…白)を論理積(SRCAND)で転送する
これで透過できるはずです。
透過率の調整は2のマスク画像の円の部分の色を調整してやればできると思います。
1:画面を一旦クリアする。(今回の場合は数字の6を描画する)
2:1の画像の上に描画したい画像(今回の場合は円)のマスク画像を用意する(背景…黒、円…RGB(0x88, 0x88, 0x88)くらい?)
3:Bitblt関数で1と2の論理和(SRCPAINT)で転送する
4:Bitblt関数で3の画像と描画したい画像(背景…白)を論理積(SRCAND)で転送する
これで透過できるはずです。
透過率の調整は2のマスク画像の円の部分の色を調整してやればできると思います。
Re:C++ 図形透明
私の方が勘違いしていたらいけないので、確認です。
テスト的な簡単なものを組んでみたのですが、こういう事でよかったんでしょうか?(画像参照)
青い丸がマウスカーソルの位置に、RGB(0x00, 0x00, 0xFF)の色で描画されています。
テスト的な簡単なものを組んでみたのですが、こういう事でよかったんでしょうか?(画像参照)
青い丸がマウスカーソルの位置に、RGB(0x00, 0x00, 0xFF)の色で描画されています。
Re:C++ 図形透明
たぶんやりたいことは、ブラシを透明ブラシにすれば出来ると思いますよ。
・CreateBrushIndirectでlbStyleをBS_NULLにするとか。
・GetStockObjectでHOLLOW_BRUSHを取得するとか。
・CreateBrushIndirectでlbStyleをBS_NULLにするとか。
・GetStockObjectでHOLLOW_BRUSHを取得するとか。
Re:C++ 図形透明
>>タイトルのとおりなんですが、たとえば数字の六を書きその上に円を書いてアクティブになっているように見せたい時円を透明にして下の六を透かしたいのですが、どのような方法があるのでしょう?
よくよく質問を見返してみると…私が勘違いしているっぽいですね(^_^;)
ひょっとして、質問者さんは丸いボタンコントロールのようなものを作成したいのでしょうか?
よくよく質問を見返してみると…私が勘違いしているっぽいですね(^_^;)
ひょっとして、質問者さんは丸いボタンコントロールのようなものを作成したいのでしょうか?
Re:C++ 図形透明
いやバグさんのやり方であっています。
あのですね失礼かも知れないのですが、作られていたソースをいただけないでしょうか?
こちらのソースを公開することができないので、理不尽なんですが、できたらお願いします。
あのですね失礼かも知れないのですが、作られていたソースをいただけないでしょうか?
こちらのソースを公開することができないので、理不尽なんですが、できたらお願いします。
Re:C++ 図形透明
ソースを渡すのは構いませんが、その前に分からない部分を明らかにしておいた方がよくないですか?
私が書き込みした1~4の手順は試してみました?
もし、分からないのであれば、どの段階でつまづいていますか?
私が書き込みした1~4の手順は試してみました?
もし、分からないのであれば、どの段階でつまづいていますか?
Re:C++ 図形透明
円とかは、ビットマップでもっていなくて、Ellipseや文字の6とかを使っています。
Bitblt関数について少し調べたら画像処理に使うようなことが書いてあったんで、
Bitblt関数について少し調べたら画像処理に使うようなことが書いてあったんで、
Re:C++ 図形透明
はい、最初にEllipse関数を使用していると書かれていましたので、おそらくCDCクラスのEllipse関数だろうと思い、毎回デバイスコンテキストを取得して描画しなおしています。
私の方法では、メモリ上にビットマップを何枚か用意して、それらを重ね合わせる事で描画しています。
私の方法では、メモリ上にビットマップを何枚か用意して、それらを重ね合わせる事で描画しています。
Re:C++ 図形透明
なるほど画面をメモリにおいて、Bitblt関数で重ねるんですね。
わかりました!だいたいわかったのでやってみます。
とりあえず解決にさせていただきます。
もしつまずいたらもう一度たずねるかもしれません。
バグさんどうもありがとうございました。
わかりました!だいたいわかったのでやってみます。
とりあえず解決にさせていただきます。
もしつまずいたらもう一度たずねるかもしれません。
バグさんどうもありがとうございました。