处置后台线程中使用的位图

时间:2013-02-21 15:37:09

标签: c# multithreading bitmap dispose emgucv

我需要知道如何正确处理Bitmaps,以便我没有内存泄漏。 我在BackgroundWorker中抓取视频并将其分配给PictureBox:

private void bwVideo_ReadCamera(object sender, DoWorkEventArgs e)
{
  Bitmap temp = null;
  while (true)
  {
    Image<Bgr, Byte> frame = logitec.QueryFrame();
    if (temp != null)
      temp.Dispose();
    temp = frame.ToBitmap();
    pictureBox2.Image = temp;
   }
}

问题是我仍然使用此代码获得“Out of Memory Exception”。我试过通过使用BackgroundWorker ReportProgress释放pictureBox2.Image变量并在上面的代码中等待dispose完成(你需要与gui同步来调用PictureBox图像上的dispose)。我还尝试使用Image类的“Bitmap”属性,它在Image和Bitmap之间共享数据。

所以我的问题是,在这种情况下,处理我的形象的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您的Image<Bgr, Byte>声明应该有一个using语句。请参阅the documentation