OP ссылается на какие-то лаги, когда рисует поток захвата камеры из EmguCv в элемент управления canvas
wpf. OP также заявляет, что задержка исчезает при потоковой передаче с помощью стороннего программного обеспечения.
Это вызвано низкой производительностью кода OP.
После просмотра примера размещенного кода я бы предложил следующие улучшения:
- Увеличение частоты кадров в секунду из параметров EmguCV
Возможно, ваше устройство поддерживает более высокие скорости кадров в секунду, попробуйте увеличить это значение.
Рисование растрового изображения над другим элементом управления, например image
Насколько я знаю, рисование растрового изображения над canvas
медленнее, чем при рисовании над image
контроль. Хорошим решением было бы перекрыть оба элемента управления, чтобы вы могли закрасить рамки поверх image
и нарисовать фигуры поверх canvas
, поскольку они хорошо перекрываются.
Очистка метода рендеринга Сохраняйте простоту и старайтесь избегать такого количества управляющих структур, когда находитесь внутри критического программного блока. Особенно в программных блоках, которые выполняются, когда внешние устройства запускают событие.
Исправление возможной блокировки программы Насколько я вижу, вы блокируете событие ProcessFrame
с помощью переменной bool с именем m_capture_in_progress
, которая установлена в true пока вы рисуете рамку, и она освобождается после завершения рисования. Это может привести к тому, что следующие входящие кадры не будут окрашены, поскольку метод все еще заблокирован предыдущим кадром. Это может привести к снижению производительности, так как многие кадры теряются и не окрашиваются.