2011-10-17 103 views
0

我有一个使用Emgu(一个OpenCV的.net包装)编写的视频播放器,我捕获帧并在certan帧上执行一些操作。在功能上,我让用户拍摄流视频的快照,并以不同的形式突出显示快照的各个部分。从流视频获取快照(新手)

但是,由于视频播放器正在播放子窗体上的图像下面,因此用户在窗体上绘制时也会更新。这是不可取的。我很确定这与我的锁定和解锁的东西有关,我是这个东西的新手。

任何想法我错了吗?我本来以为锁(bmpFrame)会阻止任何更新,但它并不:

private void btnTag_Click(object sender, EventArgs e) 
    { 
     if (_video != null && _video.CurrentFrame != null) 
     { 
      try 
      { 
       using (Bitmap bmpFrame = (Bitmap)_video.CurrentFrame.Bitmap) 
       { 
        lock (bmpFrame) 
        { 
         TagForm f = new TagForm(bmpFrame); 
         f.Show(); 
        } 
       } 
      } 
      catch { }; 
     } 
    } 
+0

'lock(obj)'只是防止在任何时间点执行多个'lock(obj)'子句。 – Polynomial

回答

0

啊啊啊!愚蠢的我,这确实是一个疏忽。通过为新位图分配新内存来修复

using (Bitmap bmpFrame = new Bitmap(_video.CurrentFrame.Bitmap) 
{ 

    lock (bmpFrame) 
    { 
     TagForm f = new TagForm(bmpFrame); 
     f.Show(); 
    } 

} 
+0

希望这对我的立场有些新手有些帮助。 – Mikos