2011-02-04 11 views
5

透明なPNG画像をImageSourceとして、PNGの透明性を考慮したSystem.Drawing.Iconに変換しようとしています。トランスペアレントPNGをSystem.Drawing.Iconに変換する

ウィンドウのアイコンをPNG ImageSourceに設定すると、WPFは何らかの形でこれを内部的に行うことができますが、これを手動で行う方法はありますか?具体的には、システムトレイの通知アイコンを設定するためにこれが必要です。本当に不器用な.ico形式のリソースを使用しないようにしたいと思っています。

+0

Windows Vistaは、実際にPNG形式の.icoファイルをサポートしています。これはあなたのために働きますか? http://blogs.msdn.com/b/oldnewthing/archive/2010/10/22/10079192.aspx – MerickOWA

+0

.NETにPNGから.icoをビルドするために使用できるユーティリティ/関数がない限りフライ...知っておいて、tho。 – devios1

+0

@chaiguyあなたはhttp://www.hardcodet.net/projects/wpf-notifyiconを使ってWPFシステムトレイの処理を行っていますか? – MerickOWA

答えて

6

あなたは

Icon.FromHandle(image.GetHIcon()) 

You'll need to explicitly destroy the icon when you're done with itを書き込むことができます。

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
extern static bool DestroyIcon(IntPtr handle); 

DestroyIcon(newIcon.Handle); 
+0

ここでは完全に話題にはなりませんが、司会選挙では@SLaks! –

+0

ここで問題となるのは、GetHIcon()はImageSourceではなくBitmapのメソッドであり、ImageSourceからBitmapを取得する方法がまったくないように見えます。 )はPNGの透明性を保持しません。 – devios1

1

を、私はこの〜 を探していますここに1つですが、非常に良いではありません!

 Icon icon; 
     Image source = Image.FromFile(picturefile, true); 

     Bitmap target = new Bitmap(iconsize, iconsize, 
      System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     Graphics g = Graphics.FromImage(target); 
     g.DrawImage(source, 0, 0, iconsize, iconsize); 

     //target.Save("c:\\temp\\forest.bmp"); 

     icon = Icon.FromHandle(target.GetHicon()); 

     FileStream fs = File.Create(iconfile); 
     icon.Save(fs); 
     fs.Close(); 

     icon.Dispose(); 
     target.Dispose(); 
     source.Dispose(); 
関連する問題