C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[24]: PictureBoxの透過処理 その2


(過去ログ 54 を表示中)

[トピック内 33 記事 (1 - 20 表示)]  << 0 | 1 >>

■30142 / inTopicNo.1)  PictureBoxの透過処理 その2
  
□投稿者/ Kei (12回)-(2008/12/18(Thu) 15:15:29)

分類:[C/C++] 

#30102で解決済みとしたのですが、
実際は件名の内容が解決した訳では無く、また、相談の内容がちょっと変わるので別スレッドを立てさせていただきました。

開発環境:
 WinXP、VC++2003 (但し作成したアプリの動作環境はVistaも含む)

質問の内容:
 フォーム上にある丸いボタン用の画像を透過処理したい。

前回の解決方法:
 画像透過を使うのではなくボタンにSetWindowRgnを使って領域ごと形を変える。

結果的に皆様のお陰で意図通りに動き、丸いボタンができました。(感謝感謝です)
ただ、実現してみて「あまり形が綺麗じゃない」という事がわかりました。
丸いボタンなのですが…カクカクしてるというか…
滑らかにする設定があるのでしょうか?
それともやはり透過の方がいいのでしょうか?

改めましてよろしくお願いします。
引用返信 編集キー/
■30143 / inTopicNo.2)  Re[1]: PictureBoxの透過処理 その2
□投稿者/ .SHO (460回)-(2008/12/18(Thu) 15:34:52)
丸いボタンではなく、正方形のボタンの上に
丸い画像をのせたいということですか?
引用返信 編集キー/
■30144 / inTopicNo.3)  Re[2]: PictureBoxの透過処理 その2
□投稿者/ みは (13回)-(2008/12/18(Thu) 15:38:31)
No30143 (.SHO さん) に返信
> 丸いボタンではなく、正方形のボタンの上に
> 丸い画像をのせたいということですか?

円にしたいのに多角形のように角がついてできてしまう、とういうことでは?
引用返信 編集キー/
■30145 / inTopicNo.4)  Re[3]: PictureBoxの透過処理 その2
□投稿者/ .SHO (461回)-(2008/12/18(Thu) 15:42:12)
No30144 (みは さん) に返信

> フォーム上にある丸いボタン用の画像を透過処理したい。

これがわかりません。なぜ画像に拘ってるのか?

フォーム上に丸いボタンを作りたい。

では?
引用返信 編集キー/
■30146 / inTopicNo.5)  Re[4]: PictureBoxの透過処理 その2
□投稿者/ Kei (13回)-(2008/12/18(Thu) 15:54:47)
No30145 (.SHO さん) に返信

またお世話になります。

みはさんの仰る通り、ボタン自体の形の話で、カクカクした丸ではなく角のない丸にしたいのです。
画像にこだわる理由というのも特にないのですが、画像処理として知っておけばラベル画像の透過にも使えるかなと。
あと、人間の形等、複雑な形のボタンにも使えるかなぁと。

ただ、画像だとMouseDown時にヘコむロジックを記述するのが面倒ですが(笑)
引用返信 編集キー/
■30150 / inTopicNo.6)  Re[5]: PictureBoxの透過処理 その2
□投稿者/ .SHO (462回)-(2008/12/18(Thu) 16:00:47)
No30146 (Kei さん) に返信

いや、だから、画像自体を透過するのは透過GIFでも使わないと無理です。

逆に、画像はボタンでもラベルでも何でもいいのですが、なんらかの
ウィンドウ上に描画されるわけですから、そのウィンドウハンドルさえ
取得できれば、SetWindowRgnでどうにでもなります。

引用返信 編集キー/
■30151 / inTopicNo.7)  Re[5]: PictureBoxの透過処理 その2
□投稿者/ .SHO (463回)-(2008/12/18(Thu) 16:03:38)
No30146 (Kei さん) に返信

> みはさんの仰る通り、ボタン自体の形の話で、カクカクした丸ではなく角のない丸にしたいのです。

カクカクに関しては、点をつないで○を作っている以上、ある程度の大きさの○でなければ
当然カクカクします。

どうしても気になるなら「人間の形等、複雑な形のボタン」とご自分で言われてるように
ご自分で綺麗な円を描いでリージョンを作成してください。

引用返信 編集キー/
■30153 / inTopicNo.8)  Re[6]: PictureBoxの透過処理 その2
□投稿者/ Kei (14回)-(2008/12/18(Thu) 16:11:03)
No30151 (.SHO さん) に返信

> いや、だから、画像自体を透過するのは透過GIFでも使わないと無理です。

調べてるときにVBでビットマップを透過する方法が載ってたのですが、VC++では無理という事でしょうか?
色を指定してそこの色を抜くような処理でしたが。

う〜ん、それならVBで作った方が意図しているデザインが作れそうですね…

> ご自分で綺麗な円を描いでリージョンを作成してください。
描いた円でやってみたんですが同じでした(笑)

ちょっとどの言語を使うかっていう所から考え直してみますね。

いろいろと有難うございました!
解決済み
引用返信 編集キー/
■30155 / inTopicNo.9)  Re[7]: PictureBoxの透過処理 その2
□投稿者/ .SHO (465回)-(2008/12/18(Thu) 16:16:03)
No30153 (Kei さん) に返信

> 調べてるときにVBでビットマップを透過する方法が載ってたのですが、VC++では無理という事でしょうか?
> 色を指定してそこの色を抜くような処理でしたが。

ですから、それが望みなら、四角いボタンの上に丸い画像ですよね。

> 描いた円でやってみたんですが同じでした(笑)

ならそれが限界です。他の言語でも同じです。
解決済み
引用返信 編集キー/
■30159 / inTopicNo.10)  Re[8]: PictureBoxの透過処理 その2
□投稿者/ Kei (15回)-(2008/12/18(Thu) 16:26:35)
No30155 (.SHO さん) に返信

私の質問と解釈の仕方がおかしかったという事でしょうか?

「丸く[見える]ボタン」という表現で言うなら確かに「四角いボタンに丸の画像」という表現も合点がいくのですが。
「四角いボタンに丸の画像」を素直に想像すると、普通の灰色の四角いコマンドボタンに丸い絵の画像が背景として貼られてるだけのイメージなのです。

.SHOさんの仰っている「四角いボタンに丸の画像」とはユーザの視覚に四角いボタンが見えてますか?
もし見えていないならその方法を是非教えていただきたいです。

ちなみにSetWindowRgnのサイズは100×100なのですが、それでも小さいのでしょうか…
引用返信 編集キー/
■30160 / inTopicNo.11)  Re[9]: PictureBoxの透過処理 その2
□投稿者/ .SHO (467回)-(2008/12/18(Thu) 16:29:21)
No30159 (Kei さん) に返信

> .SHOさんの仰っている「四角いボタンに丸の画像」とはユーザの視覚に四角いボタンが見えてますか?

見えてます。
だって、画像を透過してボタンの上に描画したら見えますよね。

引用返信 編集キー/
■30161 / inTopicNo.12)  Re[9]: PictureBoxの透過処理 その2
□投稿者/ .SHO (468回)-(2008/12/18(Thu) 16:31:18)
No30159 (Kei さん) に返信

> ちなみにSetWindowRgnのサイズは100×100なのですが、それでも小さいのでしょうか…

↓これじゃないの?
rgn = CreateEllipticRgn(5,5,50,50);

引用返信 編集キー/
■30162 / inTopicNo.13)  Re[10]: PictureBoxの透過処理 その2
□投稿者/ Kei (16回)-(2008/12/18(Thu) 16:37:33)
No30161 (.SHO さん) に返信

> > ↓これじゃないの?
> rgn = CreateEllipticRgn(5,5,50,50);

画像が治まりきらなかったんで
rgn = CreateEllipticRgn(5,5,100,100);
にしてみました。

では一般的なアプリの丸いボタンってどうやって作ってるんでしょう。。。
カクカクしてなくてサイズの小さいボタンもたくさんあるのに。。。
引用返信 編集キー/
■30163 / inTopicNo.14)  Re[11]: PictureBoxの透過処理 その2
□投稿者/ .SHO (469回)-(2008/12/18(Thu) 16:43:03)
No30162 (Kei さん) に返信

> では一般的なアプリの丸いボタンってどうやって作ってるんでしょう。。。
> カクカクしてなくてサイズの小さいボタンもたくさんあるのに。。。

標準の四角いボタンではなく、丸い綺麗なボタンを使うような凝った作りのアプリは
ボタンコントールを使わずに、一から全部自分でボタンの機能を実装してます。

引用返信 編集キー/
■30165 / inTopicNo.15)  Re[12]: PictureBoxの透過処理 その2
□投稿者/ Kei (17回)-(2008/12/18(Thu) 16:57:58)
No30163 (.SHO さん) に返信

> ボタンコントールを使わずに、一から全部自分でボタンの機能を実装してます。

元々は件名の通り、「ボタン」よりも画像の透過が目的でした。
リージョンという世界を知らなかった私には「画像を透過してonclik、mousedownなど全部記述する」という発想しかなかったんで、透過ができれば地道にボタンにして行こうと思ってます。
(リージョンで綺麗にできれば最高だったのですが)

自分で書いてて目的がぶれてるなぁと気付きました。
なので再再度、質問させてください(件名はぶれてないので別スレじゃなくてもいいかな)

「ビットマップファイル画像を指定色で透過してフォーム上に表示するにはどのように実装すればいいのでしょう?」
という質問です。

改めて宜しくお願いします。
引用返信 編集キー/
■30167 / inTopicNo.16)  Re[13]: PictureBoxの透過処理 その2
□投稿者/ .SHO (470回)-(2008/12/18(Thu) 17:03:47)
No30165 (Kei さん) に返信

> リージョンという世界を知らなかった私には「画像を透過してonclik、mousedownなど全部記述する」という発想しかなかったんで、透過ができれば地道にボタンにして行こうと思ってます。

なるほど!
やっと、もともとの質問が理解できました。

またAPIで良ければ、TransparentBlt です。

引用返信 編集キー/
■30168 / inTopicNo.17)  Re[14]: PictureBoxの透過処理 その2
□投稿者/ .SHO (471回)-(2008/12/18(Thu) 17:07:50)
でも、私もこの手の処理はよく自分で実装しちゃいますが
丸いボタンの背景って一色じゃないですか?

もし一色だったら、わざわざ透過するよりも、その色で
回りを塗りつぶした四角い画像で問題ないですよね。

もしかしたらシステムカラーを取得して、背景色が変わるとか
凝ったことをしてるのかな?
引用返信 編集キー/
■30171 / inTopicNo.18)  Re[13]: PictureBoxの透過処理 その2
□投稿者/ 渋木宏明(ひどり) (990回)-(2008/12/18(Thu) 17:32:17)
渋木宏明(ひどり) さんの Web サイト
> 元々は件名の通り、「ボタン」よりも画像の透過が目的でした。
> リージョンという世界を知らなかった私には「画像を透過してonclik、mousedownなど全部記述する」という発想しかなかったんで、透過ができれば地道にボタンにして行こうと思ってます。
> (リージョンで綺麗にできれば最高だったのですが)

リージョンと透過では、目的が違います。

リージョンは、「コントロールの占める領域」を規定するものです。
「丸い形のボタン(コントロール)」を実現するためには、リージョンが必要です。

リージョンを使わずに「丸いボタンの絵を貼ったボタン」を作っても、それはやはり「四角いボタンに丸いボタンの絵が描かれたもの」でしかありません。
「丸いボタン」の余白部分をクリックすると、ボタンはクリックに反応してしまいます。

ボタンに「丸い領域を表すリージョン」を設定してやれば、余白部分をクリックした時のイベントは、コントロールのコンテナで処理することになります。

一方、透過だ背景色を透明にするだとユー話は「高品質な絵面を得るためのテクニック」です。
具体的には、ボタンの輪郭に当たる部分のアルファ値を調節することで、ボタンの背景色との一体感を醸し出します。

けど、実際にはリージョンと透過の両方の技術を組み合わせないと、結局のところ「なんちゃって丸いボタン」でしかありません。

引用返信 編集キー/
■30172 / inTopicNo.19)  Re[14]: PictureBoxの透過処理 その2
□投稿者/ 渋木宏明(ひどり) (991回)-(2008/12/18(Thu) 17:36:04)
渋木宏明(ひどり) さんの Web サイト
> けど、実際にはリージョンと透過の両方の技術を組み合わせないと、結局のところ「なんちゃって丸いボタン」でしかありません。

実のところ、Windows.Forms の場合、ボタンコントロールをベースにして「背景と一体感のある丸いボタン」を作るのはなかなかしんどいです。(「できない」とは言わないけど)

高品質な絵面と両立させたいなら、いっそ、自前で「論理的なボタン」を作ってしまうのも一案です。

たとえばツールバーボタンも、あれはボタンコントロールを並べて実現されているわけではありません。

ツールバーが「ボタンとして扱うべき領域」を自分で管理していて、「ボタンのようなふるまい」を見せているだkです。

引用返信 編集キー/
■30175 / inTopicNo.20)  Re[15]: PictureBoxの透過処理 その2
 
□投稿者/ Kei (18回)-(2008/12/18(Thu) 18:01:07)
No30172 (渋木宏明(ひどり) さん) に返信

お返事ありがとうございます。

色々と貴重なご意見、感謝感謝です。

確かに透過+リージョンというのは中々骨が折れそうですね…
イチイチ、イベントも絡んでくるでしょうし…

まぁ、今回は「透過の実現」が目的のスレッドだったんで、リージョンについては透過が自分なりに納得できたらかなぁと。

そんな感じで.SHOさんに頂いた「TransparentBlt」というキーワードで色々調べているのですが…
ちょっと難しいです。

このサイトを参考にしようと思っているのですが、どこにコードを記述すればいいのやら…
(include、pragma宣言だけはわかるのですが(笑))
コールバック関数というものから調べているのですが…「どこの部分の話??」状態でして…

http://www13.plala.or.jp/kmaeda/winc/colorkey.htm

皆さんに頼りっきりで申し訳ないのですが、ご教授お願いできませんでしょうか?
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -