【问题标题】:Clear memory in wpfwpf清除内存
【发布时间】:2014-01-13 20:34:09
【问题描述】:

我正在做一个项目,我正在从 kinect 捕获帧并对它们进行一些实时处理,我需要显示位图,因此我将它们转换为 bmapsource 并传递给 image.source:

Bitmap bmap = new Bitmap(640, 480, System.Drawing.Imaging.PixelFormat
                                                     .Format24bppRgb);

BitmapSource bmapSource= System.Windows.Interop.Imaging.
  CreateBitmapSourceFromHBitmap(bmap.GetHbitmap(),IntPtr.Zero, Int32Rect.Empty, 
                                BitmapSizeOptions.FromEmptyOptions());
image.source = bmapSource;

但是当我在 2 分钟后处理 15FPS 时,我收到此部分的错误“内存不足”。 是否有在每个进程后清除内存?或者有没有其他方法可以在 wpf 中显示 bmap?

提前致谢:)

【问题讨论】:

标签: c# wpf memory


【解决方案1】:

试试这个:

            [System.Runtime.InteropServices.DllImport("gdi32.dll")]
            public static extern bool DeleteObject(IntPtr hObject);
            IntPtr bmp;
{
                if (bmp != null)
                {
                    DeleteObject(bmp);
                }
                Bitmap bmap = new Bitmap(640, 480, System.Drawing.Imaging.PixelFormat
                                                         .Format24bppRgb);
                bmp = bmap.GetHbitmap();
                BitmapSource bmapSource = System.Windows.Interop.Imaging.
                  CreateBitmapSourceFromHBitmap(bmp, IntPtr.Zero, Int32Rect.Empty,
                                                BitmapSizeOptions.FromEmptyOptions());
                bmap.Dispose();
                bmap = null;

                image.Source = bmapSource;
}

【讨论】:

  • 亲爱的 Yushulx,感谢您的帮助,但我对这段代码有点困惑,请给我一些 cmets。你在哪里填充你得到的帧,我的意思是你从 kinect 捕获的图像或帧?我有一个结果图像,它是一个位图,我想在 image.source 中显示它
  • 对不起,我没有说清楚。我应该有单独的代码块。括号外的代码应在您的类中全局声明。括号内的代码用于您的实现。我没有对 kinect 捕获做任何事情,只是在我自己的活动中尝试过。所以我所做的是发布两个数据副本。一种是位图,可以使用 dispose。另一个是来自 bitmap.gethbitmap 的副本。你应该使用 DeleteObject 来释放它。所以试试看。希望它会起作用:)
  • IntPtr bmp 用于保存位图句柄,并在您尝试绘制从 Kinect 捕获的新帧之前释放它。确保您的图像源只有一个副本,并释放其他无用的内存。位图不受管理。你必须手动释放它。
  • 亲爱的 Yushulx,感谢您的帮助,但我仍然有内存不足的问题,现在它在您的代码的一部分上,bmp = bmap.GetHbitmap();
  • 收到新帧或停止接收来自 Kinect 的帧时,必须通过 DeleteObject(bmp) 释放内存。
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
相关资源
最近更新 更多