У меня есть приложение для захвата веб-камеры, и я пытаюсь реализовать предварительный просмотр видео в своем интерфейсе WPF. Захват происходит в C ++ DLL. У меня есть текущее решение, но я не слишком доволен им. Основная цель заключается в том, чтобы предварительный просмотр видео в пользовательском интерфейсе не сильно мешал DLL C ++, поскольку он должен сжимать видеокадры и записывать их на диск. Я не смогу отобразить каждый кадр, потому что сжатие довольно сильно загружает процессор.
Мое текущее решение для предварительного просмотра видео:
В моем окне используется элемент управления Image, и его атрибут Source привязывается к данным BitmapSource с именем VideoPreviewSource
Я настроил System.Threading.TimerCallback для обновления моего предварительного просмотра. Функция обратного вызова таймера отправляет потоку, который может обновить пользовательский интерфейс (используя this.Dispatcher.BeginInvoke), который вызывает UpdatePreview ()
UpdatePreview () запрашивает у C ++ DLL видеокадр. Вызов DLL помещает необработанные данные изображения в byte [] _rawImageData, который я выделяю один раз в конструкторе моего окна.
UpdatePreview () затем устанавливает VideoPreviewSource в: BitmapSource.Create (ширина, высота, 96, 96, pf, ноль, _rawImageData, ширина * 4); Наконец вызывается OnPropertyChanged ("VideoPreviewSource").
Кажется, что если я сделаю таймер более частым, сборщик мусора будет вызываться реже, и это будет выглядеть как утечка памяти.
Есть ли лучший подход к просмотру видео?