DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ImageToIPictureでアイコンを変換すると透過にならない

環境/言語:[VB.NET NET Framework(1.1)]
分類:[.NET]

 はじめまして、嶋田 そぼろと申します。

現在VB6のプログラムをDotNet2003 VB に移行する仕事を
しています。そこでどうしても使用しないといけない
ActiveXコントロールがあり、DotNetで取り込んでもきち
んと動作していたのですが、一つだけうまく動作してく
れない部分があります。

コントロールに表示するアイコンを取り込んでいるのですが
以下の手順で取り込んでいます。
Dim bmp As Bitmap
Dim ipd As stdole.IPictureDisp

bmp = New BitMap("C:\A.ico")
ipd = Compatibility.VB6.ImageToIPicture(img)

後は、ActiveXコントロールのPictureプロパティに
先程作ったipdを設定しています。

これでアイコンが表示はされるのですが、本来なら透けて表示
されるはずのアイコンの背景が青くなってしまっています。

他のActiveXコントロールでも同様でしたので、このActiveX
コントロール特有の問題ではないようです。

この問題についてご存知の方がいましたら、何か情報をいただ
けないでしょうか?
> 以下の手順で取り込んでいます。
についてはさっぱり解りませんが
> 他のActiveXコントロールでも同様でしたので、このActiveX
> コントロール特有の問題ではないようです。
とのことなので。


 過去ログより

透明度(アルファ値)を含むアイコンの描画について
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=8096&no=0&KLOG=2

#直接的な内容ではありませんし解決もしてませんけど。


 また、以下はぐぐって見つけたものですが参考になるかも知れません。

Converting transparent bitmaps to IPictureDisp
http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-interop/1274/Converting-transparent-bitmaps-to-IPictureDisp



=========================================================================
> これでアイコンが表示はされるのですが、本来なら透けて表示
> されるはずのアイコンの背景が青くなってしまっています。

#↓とかも同じ原因なのかなぁ(雑感)

pictureBox.Imageをクリップボードへ転送
http://dobon.net/vb/bbs/log3-8/4236.html

クリップボードへの画像コピー
http://dobon.net/vb/bbs/log3-8/4772.html
嶋田 そぼろです。

深山 ファミリーさん回答ありがとうございます。
紹介いただいた過去ログ、リンク等を参考にして
いろいろ試してみましたがうまくいっていません。

さらに調べてみます。
もしなにかいい方法が見つかればまたここに
ます。

ありがとうございました。
> コントロールに表示するアイコンを取り込んでいるのですが
> 以下の手順で取り込んでいます。
> Dim bmp As Bitmap
> Dim ipd As stdole.IPictureDisp
>
> bmp = New BitMap("C:\A.ico")
> ipd = Compatibility.VB6.ImageToIPicture(img)
>
> 後は、ActiveXコントロールのPictureプロパティに
> 先程作ったipdを設定しています。
>
> これでアイコンが表示はされるのですが、本来なら透けて表示
> されるはずのアイコンの背景が青くなってしまっています。

要するに Bitmap クラスか ImageToIPicture() が .ico にきちんと対応してないってことですよね?

PictureDisp が欲しいだけなら、OleLoadPicturePath() あたりを P/INVOKE すればいいんじゃないでしょうか。
嶋田 そぼろです。

渋木宏明さんありがとうございます。
改めて再確認したのですが、
Bitmapクラスから読み込んでいたのを
Iconクラスから -> IconToIPicture関数を
使えばあっさり解決しました。
お騒がせしました、、、、、、

OleLoadPicturePathに関してはまた試してみます。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板