在代码中将透明PNG转换为System.Drawing.Icon

时间:2011-02-04 15:43:09

标签: c# .net wpf icons png

我希望将透明的PNG图像作为ImageSource转换为尊重PNG透明度的System.Drawing.Icon。

如果您将窗口的图标设置为PNG ImageSource,WPF可以在内部以某种方式执行此操作,但有什么方法可以手动执行此操作?具体来说,我需要这个来设置系统托盘通知图标,我真的想避免使用笨拙的.ico格式资源。

2 个答案:

答案 0 :(得分: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);

答案 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();