0

我想在我的视频上加水印。是否可以使用 directshow 过滤器。想要在视频上重叠图像,例如频道徽标。以便在播放视频时固定图像。

请提供一些有价值的帮助或示例(VC++)

4

1 回答 1

2

我以前做过。你有两个选择。

  1. 使用 VMR-7 或 VMR-9 的混音器功能。我向你保证这看起来真的很难看,因为 VMR 过滤器根本无法进行 alpha 混合。您的水印将有粗糙的边缘。

  2. 实现从 CTransInPlaceFilter 派生的过滤器类。

您实现以下方法:

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

在过滤器的构造函数中(或在图表运行之前调用的其他方法),从文件或资源中加载水印。将图像文件的位图位保存到缓冲区中。

调用 Transform 时,打开传入的 IMediaSample,访问其缓冲区,并使用双嵌套 for 循环将水印的每个像素复制到图像的缓冲区中。

所有这一切的一个问题是您的输入源可能不是原生 RGB。例如,大多数网络摄像头都是 YUV 源(或者更糟的是 MJPG)。通过将过滤器限制为仅接受 RGB 类型将强制加载 DShow 颜色转换器过滤器。因此,额外的延迟可能会添加到您的图表中。至于 alpha 混合(如果你想要的话),你自己在这里 - 你在上面进行 blitting 的源缓冲区可能是没有 alpha 通道的 RGB24。

于 2010-04-06T05:06:16.260 回答