我想在我的视频上添加水印。是否可以使用directshow过滤器。 想要在视频上重叠图像,如频道徽标。这样当视频播放时图像就会被修复。
请提供一些有价值的帮助或样本(VC ++)
答案 0 :(得分:2)
我以前做过这个。你有两个选择。
使用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混合(如果你想要它),你就是你自己 - 你在blitting上面的源缓冲区很可能是没有alpha通道的RGB24。