Получить снимок из потокового видео (новичок) - PullRequest
0 голосов
/ 17 октября 2011

У меня есть видеопроигрыватель, написанный на Emgu (оболочка .net для OpenCV), и я фиксирую кадры и выполняю некоторые операции с определенными кадрами. Что касается функциональности, я позволил пользователю сделать снимок потокового видео и выделить фрагменты снимка в другой форме.

Однако, поскольку проигрыватель видео воспроизводится под изображением в дочерней форме, он также обновляется по мере того, как пользователь рисует в форме. Это нежелательно. Я почти уверен, что это как-то связано с моими блокирующими и разблокирующими вещами, и я новичок в этом деле.

Есть идеи, где я иду не так? Я бы подумал, что lock (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 { };
        }
    }

1 Ответ

0 голосов
/ 18 октября 2011

аааа!глупый я, это был действительно недосмотр.Исправлено путем выделения новой памяти для нового растрового изображения

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

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

}
...