Водяной знак + фильтр Directshow - PullRequest
0 голосов
/ 06 апреля 2010

Я хочу поставить водяной знак на моем видео.Можно ли это сделать с помощью фильтра DirectShow.Хотите наложить изображение на видео, как логотип канала.так что изображение будет исправлено во время воспроизведения видео.

Пожалуйста, предоставьте некоторую ценную помощь или примеры (VC ++)

1 Ответ

2 голосов
/ 06 апреля 2010

Я делал это раньше. У вас есть два варианта.

  1. Используйте возможности микшера VMR-7 или VMR-9. Я гарантирую, это будет выглядеть ужасно, потому что фильтры VMR вообще не могут выполнять альфа-смешивание. У вашего водяного знака будут неровные края.

  2. Реализация класса фильтра, производного от CTransInPlaceFilter.

Вы реализуете следующие методы:

  CheckMediaType   (accept all RGB formats)
   SetMediaType     (accept all RGB formats)
   Transform        (this is where you do the overlay)

В конструкторе вашего фильтра (или в другом методе, который вызывается до запуска графика), загрузите ваш водяной знак из файла или ресурсов. Сохраните битовые биты файла изображения в буфере.

Когда вызывается Transform, взломайте переданный образец IMediaSample, получите доступ к его буферу и создайте цикл с двойным вложением для копирования каждого пикселя водяного знака в буфер изображения.

Одна из проблем со всем этим заключается в том, что ваш входной источник не может быть родным RGB. Например, большинство веб-камер являются источниками YUV (или, что еще хуже, MJPG). Ограничение фильтра на прием только типов RGB приведет к загрузке фильтров конвертера цвета DShow. Таким образом, дополнительные задержки могут быть добавлены к вашему графику. Что касается альфа-смешивания (если вы этого хотите), вы здесь сами по себе - исходный буфер, над которым вы блеете, скорее всего, будет RGB24 без альфа-канала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...