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

透明度(アルファ値)を含むアイコンの描画について

環境/言語:[Windows XP/VB.NET .NET Framework 1.0]
分類:[.NET]

透明度(アルファ値)を含むアイコンの描画がうまくいかずに困っています。
たとえば,次のようなコードを実行したとします。

Dim bmp As New Bitmap(32, 32)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawIcon(SystemIcons.Information, 0, 0)
PictureBox1.Image = bmp

アイコンそのものは描画されますが,透明度が指定されている部分が
「黒い影」のようになってしまい,正しく描画されません。
SystemIconsのメンバをError等,他のものを指定しても同様です。

こちらで調べた限りでは,Win32APIのDrawIconやDrawIconExなどを利用しても
同様の結果になります。最悪の場合,Image.FromFileメソッドを利用して
PictureBoxにアイコンをロードしたときも,透明度を含むアイコンの場合は,
同じように黒い影ができてしまい,うまくいきません。

一応,Paintイベントを利用し,上記の処理のように,Imageオブジェクトから
Graphicsを作成せずにアイコンの描画を行えば,黒い影ができないことは
わかっているのですが,どうも納得できません。

もしかして,現在のバージョンのGDI+では,透明度を含むアイコンを
正しく表示できないというのは,仕様なのでしょうか?
対処策等をご存じの方,どうかご教授をお願いいたします。
過去ログに同様の記事があります。

アイコンをリストビューに表示すると黒い部分がある
http://dobon.net/vb/bbs/log3-12/7198.html

また次の記事も参考になるかもしれません。

vbAccelerator - Getting File Icons Using The Shell
http://www.vbaccelerator.com/home/NET/Code/Libraries/Shell_Projects/Getting_File_Icons_Using_The_Shell/article.asp
レスありがとうございました。

既に同様の書き込みがあったとは,うかつでした。一応「アイコン」と「Icon」の
両方で検索したつもりだったのですが・・・
ところで,manifest を作成して外見を Windows Xp 風にするという方法は
既に試していたのですが,やはり結果は変わりませんでした。
透明度を含むアイコンの場合は,黒い影ができていたので,
ListViewコントロールとは状況が違うのかもしれません。
しかもよくわからないことに,透明度を含まなくても256色のアイコンで
同様の処理を行うと,透過色の部分が黒くなったりする場合があるのです。
自分でも,もう少し色々と調べてみようと思います。

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