Создание изображения с веб-камеры каждые x миллисекунд - PullRequest
1 голос
/ 23 мая 2010

Я использую c # для интеграции с веб-камерой. Мне нужно генерировать снимок каждые x миллисекунд и сохранять его в файл. У меня уже есть код, запущенный и работающий для сохранения в файл при событии нажатия кнопки, однако мне интересно, что я должен делать, когда делаю снимки в фоновом режиме - Должно ли это быть многопоточным? Я честно не уверен. Я мог бы просто заблокировать поток пользовательского интерфейса, поместить Thread.Sleep, а затем просто сделать снимок, но я не знаю, правильно ли это. Я думал об использовании фонового работника, но теперь я испытываю трудности с многопоточностью при использовании SendMessage ... Так что мне интересно, стоит ли мне вообще переходить к многопоточности или просто блокировать интерфейс.

Ответы [ 3 ]

1 голос
/ 23 мая 2010

Физическое аппаратное ограничение будет ограничено скоростью, с которой камера может обновлять свой пиксельный буфер. Веб-камеры не идут намного выше 30 кадров в секунду. Получение фактического изображения должно быть более или менее мгновенным (если только не при очень высоком разрешении), поэтому вам не потребуется начинать многопоточность. Когда я сделал это некоторое время назад, я использовал подход, описанный в

http://weblogs.asp.net/nleghari/pages/webcam.aspx

0 голосов
/ 24 мая 2010

Вы можете создать таймер, чтобы пнуть делегата каждые n миллисекунд, и этот делегат мог поставить в очередь рабочий поток, чтобы сделать то, что уже делает ваш обработчик OnClick ().

Я бы НЕ писал это как однопоточное приложение, потому что, в зависимости от производительности веб-камеры пользователя, вы могли легко оказаться в вечном цикле обработки событий таймера, в результате чего ваш основной поток пользовательского интерфейса был бы постоянно заблокирован.

ThreadQueue.QueueUserWorkitem((args) => 
{
    // Blah ...
}

не требует особых усилий для правильной работы.

0 голосов
/ 24 мая 2010

Я думаю, вы должны поставить эту задачу в отдельном потоке. В некоторых ситуациях процесс создания и сохранения изображения может занять больше времени, и в это время ваш HMI может зависнуть. Чтобы избежать этого, поместите эту задачу в отдельный поток.

...