我希望将透明的PNG图像作为ImageSource转换为尊重PNG透明度的System.Drawing.Icon。
如果您将窗口的图标设置为PNG ImageSource,WPF可以在内部以某种方式执行此操作,但有什么方法可以手动执行此操作?具体来说,我需要这个来设置系统托盘通知图标,我真的想避免使用笨拙的.ico格式资源。
答案 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();