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);
}
本文介绍如何在从WinForms迁移到WPF的过程中转换图标和图像资源。具体包括使用BitmapFrame转换为Icon的方法及反之亦然的过程。需要注意的是直接转换可能导致GDI句柄泄露。
6万+

被折叠的 条评论
为什么被折叠?



