I'm creating an WPF app, so I'm mostly working with the ImageSource class for icons. However, the system tray icon has to be of type System.Drawing.Icon
. Is it possible to create such an object from a png image?
I have tried the following:
private static System.Drawing.Icon _pngIcon;
public static System.Drawing.Icon PngIcon
{
get
{
if (_pngIcon == null)
{
//16x16 png image (24 bit or 32bit color)
System.Drawing.Bitmap icon = global::BookyPresentation.Properties.Resources.star16;
MemoryStream iconStream = new MemoryStream();
icon.Save(iconStream, System.Drawing.Imaging.ImageFormat.Png);
iconStream.Seek(0, SeekOrigin.Begin);
_pngIcon = new System.Drawing.Icon(iconStream); //Throws exception
}
return _pngIcon;
}
}
The Icon constructor throws an exception with the following message: "Argument 'picture' must be a picture that can be used as a Icon."
I figured it might be something with the bit depth of the image color as I had some issues with this earlier, but both 32bit and 24bit images didn't work. Is it possible what I'm trying to do?
I think you can try something like this before convert your image to .ico:
var bitmap = new Bitmap("Untitled.png"); // or get it from resource
var iconHandle = bitmap.GetHicon();
var icon = System.Drawing.Icon.FromHandle(iconHandle);
Where icon
will contain the icon which you need.