In the transition from Winform era to the Wpf era. Different type of image classes are used for icons, buttons images and etc....
The pre-world uses the Icon class (System.Drawing), while the newer wpf will uses ImageSource, more specifically, ImageSource's concrete derived classes such as BigmapFrame or BitmapImage (System.Windows.Media.Imaging);
Below shows the code that helps you to convert from BitmapFrame to Icon
private static Icon ConvertFromBitmapFrame(BitmapFrame bitmapFrame) { Debug.Assert(bitmapFrame != null); var ms = new MemoryStream(); var encoder = new PngBitmapEncoder(); encoder.Frames.Add(bitmapFrame); encoder.Save(ms); ms.Seek(0, SeekOrigin.Begin); var bmp = new Bitmap(ms); return Icon.FromHandle(bmp.GetHicon()); }
the above code may have handle leakage as the bmp.GetHIcon will leak the the GDI handle to the wild.
and below shows code to convert from Icon to ImageSource.
private BitmapFrame ConvertFromIcon(Icon icon) { var memoryStream = new MemoryStream(); icon.Save(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); return BitmapFrame.Create(memoryStream); }