相关疑难解决方法(0)

WPF CreateBitmapSourceFromHBitmap()内存泄漏

我需要逐个像素地绘制图像并将其显示在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记忆?

.net c# wpf memory-leaks

46
推荐指数
3
解决办法
3万
查看次数

用C#代码更改WPF窗口背景图像

我有几个图像配置为应用程序资源.

当我的应用程序启动时,主窗口的背景是通过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)?

c# wpf background-image

27
推荐指数
3
解决办法
10万
查看次数

标签 统计

c# ×2

wpf ×2

.net ×1

background-image ×1

memory-leaks ×1