C++ 図形透明

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
abc

C++ 図形透明

#1

投稿記事 by abc » 17年前

C++6.0での質問です。
タイトルのとおりなんですが、たとえば数字の六を書きその上に円を書いてアクティブになっているように見せたい時円を透明にして下の六を透かしたいのですが、どのような方法があるのでしょう?
ちなみに円はEllipse関数を使っています。
よろしくお願いします。

バグ

Re:C++ 図形透明

#2

投稿記事 by バグ » 17年前

開発環境はVC++6.0みたいですが、MFCですか?

abc

Re:C++ 図形透明

#3

投稿記事 by abc » 17年前

> 開発環境はVC++6.0みたいですが、MFCですか?

そうです。MFC AppWizard(exe) のダイアログベースです。
よろしくお願いします。

バグ

Re:C++ 図形透明

#4

投稿記事 by バグ » 17年前

例えば…ですが。

1:画面を一旦クリアする。(今回の場合は数字の6を描画する)
2:1の画像の上に描画したい画像(今回の場合は円)のマスク画像を用意する(背景…黒、円…RGB(0x88, 0x88, 0x88)くらい?)
3:Bitblt関数で1と2の論理和(SRCPAINT)で転送する
4:Bitblt関数で3の画像と描画したい画像(背景…白)を論理積(SRCAND)で転送する

これで透過できるはずです。
透過率の調整は2のマスク画像の円の部分の色を調整してやればできると思います。

abc

Re:C++ 図形透明

#5

投稿記事 by abc » 17年前

ありがとうございます。
バグさんのを参考にやってみます。
ちょっと難しそうですが(ーー)がんばってみます。

バグ

Re:C++ 図形透明

#6

投稿記事 by バグ » 17年前

私の方が勘違いしていたらいけないので、確認です。
テスト的な簡単なものを組んでみたのですが、こういう事でよかったんでしょうか?(画像参照)

青い丸がマウスカーソルの位置に、RGB(0x00, 0x00, 0xFF)の色で描画されています。

ま~く

Re:C++ 図形透明

#7

投稿記事 by ま~く » 17年前

たぶんやりたいことは、ブラシを透明ブラシにすれば出来ると思いますよ。

・CreateBrushIndirectでlbStyleをBS_NULLにするとか。
・GetStockObjectでHOLLOW_BRUSHを取得するとか。

バグ

Re:C++ 図形透明

#8

投稿記事 by バグ » 17年前

あら?ひょっとして、かなり的外れな回答してしまったのでしょうか…?(^_^;)

ま~く

Re:C++ 図形透明

#9

投稿記事 by ま~く » 17年前

>バグさん
どうでしょう?^^;
ぼくも勘違いしちゃったかな??

バグ

Re:C++ 図形透明

#10

投稿記事 by バグ » 17年前

>>タイトルのとおりなんですが、たとえば数字の六を書きその上に円を書いてアクティブになっているように見せたい時円を透明にして下の六を透かしたいのですが、どのような方法があるのでしょう?

よくよく質問を見返してみると…私が勘違いしているっぽいですね(^_^;)

ひょっとして、質問者さんは丸いボタンコントロールのようなものを作成したいのでしょうか?

abc

Re:C++ 図形透明

#11

投稿記事 by abc » 17年前

いやバグさんのやり方であっています。
あのですね失礼かも知れないのですが、作られていたソースをいただけないでしょうか?
こちらのソースを公開することができないので、理不尽なんですが、できたらお願いします。

abc

Re:C++ 図形透明

#12

投稿記事 by abc » 17年前

簡単な例として、時計の短い針の指す先が12時だとすると、12に円をのせアクティブになっているように見せるような感じにしたいです。

バグ

Re:C++ 図形透明

#13

投稿記事 by バグ » 17年前

ソースを渡すのは構いませんが、その前に分からない部分を明らかにしておいた方がよくないですか?
私が書き込みした1~4の手順は試してみました?
もし、分からないのであれば、どの段階でつまづいていますか?

abc

Re:C++ 図形透明

#14

投稿記事 by abc » 17年前

少し気になったんですが、画像でなくてもできますよね?
図でも?

abc

Re:C++ 図形透明

#15

投稿記事 by abc » 17年前

円とかは、ビットマップでもっていなくて、Ellipseや文字の6とかを使っています。
Bitblt関数について少し調べたら画像処理に使うようなことが書いてあったんで、

バグ

Re:C++ 図形透明

#16

投稿記事 by バグ » 17年前

はい、最初にEllipse関数を使用していると書かれていましたので、おそらくCDCクラスのEllipse関数だろうと思い、毎回デバイスコンテキストを取得して描画しなおしています。

私の方法では、メモリ上にビットマップを何枚か用意して、それらを重ね合わせる事で描画しています。

abc

Re:C++ 図形透明

#17

投稿記事 by abc » 17年前

なるほど画面をメモリにおいて、Bitblt関数で重ねるんですね。
わかりました!だいたいわかったのでやってみます。

とりあえず解決にさせていただきます。
もしつまずいたらもう一度たずねるかもしれません。
バグさんどうもありがとうございました。

バグ

Re:C++ 図形透明

#18

投稿記事 by バグ » 17年前

解決したようで何よりです(^-^)
おそらくダブルバッファリングが必要になると思いますので、そちらもググってみるとよいかもしれません。

abc

Re:C++ 図形透明

#19

投稿記事 by abc » 17年前

ありがとうございます(^^)
リングバッファはやった事がありますが、ダブルバッファリング調べてみます><
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る