Visual c++ 水印&x2B;Directshow过滤器

Visual c++ 水印&x2B;Directshow过滤器,visual-c++,directshow,msdn,directshow.net,Visual C++,Directshow,Msdn,Directshow.net,我想在我的视频上加一个水印。是否可以使用directshow筛选器。 希望在视频上重叠一个图像,如频道徽标。这样,当播放视频时,图像将被固定 请提供一些有价值的帮助或示例(VC++)我以前做过这个。你有两个选择 使用VMR-7或VMR-9的混音器功能。我保证这看起来很难看,因为VMR过滤器根本不能进行alpha混合。您的水印将有粗糙的边缘 实现从CTransInPlaceFilter派生的筛选器类 您可以实现以下方法: CheckMediaType (accept all RGB for

我想在我的视频上加一个水印。是否可以使用directshow筛选器。 希望在视频上重叠一个图像,如频道徽标。这样,当播放视频时,图像将被固定


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

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

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

  • 实现从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混合(如果您愿意),您可以自己选择—您在上面快速切换的源缓冲区可能是没有alpha通道的RGB24。

    有一个更简单的选项3:使用示例抓取器并在调用回调时修改视频内容。