我的WPF应用程序中有一个image
控件:
<Image x:Name="image" Source="{Binding}"/>
...而且我正在试图弄清楚哪一个是从图标设置其来源的最有效方式。我使用SystemIcons.WinLogo
作为我的测试对象。</ p>
第一种方式涉及CreateBitmpapSourceFromHIcon
:
image.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
SystemIcons.WinLogo.Handle, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
第二种方法使用BitmapImage
并从内存流中设置其来源:
var ms = new MemoryStream();
SystemIcons.WinLogo.ToBitmap().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;
var bmpi = new BitmapImage();
bmpi.BeginInit();
bmpi.StreamSource = ms;
bmpi.EndInit();
image.Source = bmpi;
我应该使用哪一个?他们都工作,我没有注意到我的系统在性能上有太大差异。
答案 0 :(得分:1)
两者都有同样的目的。如果你问我,我会采用第一种方法,因为这是直接的,不需要先将图标保存在内存流中。
但是,如果您想采用第二种方法,请确保在bitmapImage实例上调用Freeze()
以避免任何内存泄漏。冻结它会使它线程安全即你可以在后台线程中创建一个bitmapImage,并且仍然可以在UI线程上设置为Image源。
var bmpi = new BitmapImage();
bmpi.BeginInit();
bmpi.StreamSource = ms;
bmpi.EndInit();
bmpi.Freeze(); <-- HERE
image.Source = bmpi;