在WPF中设置图标作为图像控制源的正确方法
本文关键字:控制 方法 图像 WPF 设置 图标 | 更新日期: 2023-09-27 17:50:18
我在WPF应用程序中有一个image
控件:
<Image x:Name="image" Source="{Binding}"/>
…我正在试图找出哪一种最有效的方式来设置它的来源。我用SystemIcons.WinLogo
作为我的测试对象。
第一种方法涉及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;
我应该用哪一个?
两者的目的相同。如果你问我,我会选择第一种方法,因为这是直接的,不需要得到图标首先保存在内存流。
但是,如果您想使用第二种方法,请确保在bitmapImage实例上调用Freeze()
,以避免任何内存泄漏。冻结它也会使它线程安全,也就是说,你可以在后台线程中创建bitmapImage,并且仍然可以在UI线程中设置为图像源。
var bmpi = new BitmapImage();
bmpi.BeginInit();
bmpi.StreamSource = ms;
bmpi.EndInit();
bmpi.Freeze(); <-- HERE
image.Source = bmpi;