我需要逐个像素地绘制图像并将其显示在WPF中.我试图通过使用System.Drawing.Bitmap然后使用CreateBitmapSourceFromHBitmap()创建BitmapSource一个WPF图像控件来做到这一点.我在某处有内存泄漏,因为当CreateBitmapSourceFromBitmap()重复调用时,内存使用率会上升,并且在应用程序结束之前不会下降.如果我不打电话CreateBitmapSourceFromBitmap(),内存使用量没有明显变化.
for (int i = 0; i < 100; i++)
{
var bmp = new System.Drawing.Bitmap(1000, 1000);
var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
source = null;
bmp.Dispose();
bmp = null;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能释放BitmapSource记忆?
我有几个图像配置为应用程序资源.
当我的应用程序启动时,主窗口的背景是通过XAML设置的:
<Window.Background>
<ImageBrush ImageSource="/myapp;component/Images/icon.png" />
</Window.Background>
Run Code Online (Sandbox Code Playgroud)
如果发生给定事件,我想将此背景更改为另一个资源("/myapp;component/Images/icon_gray.png").
我尝试过使用两个常量:
private static readonly ImageBrush ENABLED_BACKGROUND =
new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon.png")));
private static readonly ImageBrush DISABLED_BACKGROUND =
new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon_gray.png")));
Run Code Online (Sandbox Code Playgroud)
...但很自然地,我得到一个带有无效URI的例外.
有没有一种简单的方法来this.Background = ...使用包Uri或资源(即:) 更改WPF窗口的背景图像(via Myapp.Properties.Resources.icon)?