#c# #video-streaming #video-processing #emgucv
#c# #потоковое видео #обработка видео #emgucv
Вопрос:
У меня есть видеопроигрыватель, написанный с использованием Emgu (.net-оболочка для OpenCV), и я фиксирую кадры и выполняю некоторые операции с определенными кадрами. В разделе «Функциональность» я позволяю пользователю делать снимок потокового видео и выделять разделы снимка в другой форме.
Однако, поскольку видеопроигрыватель воспроизводится под изображением в дочерней форме, оно также обновляется по мере того, как пользователь рисует в форме. Это нежелательно. Я почти уверен, что это как-то связано с моей блокировкой и разблокировкой, и я новичок в этом.
Есть идеи, где я ошибаюсь? Я бы подумал, что блокировка (bmpFrame) предотвратила бы любые обновления, но это не так:
private void btnTag_Click(object sender, EventArgs e)
{
if (_video != null amp;amp; _video.CurrentFrame != null)
{
try
{
using (Bitmap bmpFrame = (Bitmap)_video.CurrentFrame.Bitmap)
{
lock (bmpFrame)
{
TagForm f = new TagForm(bmpFrame);
f.Show();
}
}
}
catch { };
}
}
Комментарии:
1.
lock(obj)
просто предотвращает выполнение более одногоlock(obj)
предложения в любой момент времени.
Ответ №1:
аааа! глупый я, это действительно был недосмотр. Исправлено путем выделения новой памяти для нового растрового изображения
using (Bitmap bmpFrame = new Bitmap(_video.CurrentFrame.Bitmap)
{
lock (bmpFrame)
{
TagForm f = new TagForm(bmpFrame);
f.Show();
}
}
Комментарии:
1. Надеюсь, это поможет новичку на моем месте.