我使用此示例代码 https://www.codeproject.com/Articles/2632/DirectShow-MediaPlayer-in-C 并且只需要稍微改变。我尝试在IVideoWindow前面添加图片框但是图片框在IVideoWindow.i后面是一样的,使用parent和bringfront但他们不工作。我只需要在视频前面显示图片作为徽标或水印。
答案 0 :(得分:1)
DirectShow
和你正在使用的整个软件包(即Windows Forms)真的很旧。首先让我告诉你会发生什么。
DirectShow
以及所有其他DirectX
图形软件包(如Direct3D
)直接使用图形卡,并直接在您的显示器上以窗口甚至不知道的方式绘制,更不用说在它上面画一些东西了。因此,除非您在创建初始窗口的同一设备中使用DirectX渲染要显示的内容,否则无法完成。
好的,那么解决方案是什么?
我不知道你想要做什么,但多年前我使用WPF和它WritableBitmap
将从IP摄像机接收的图像渲染到屏幕上。 WPF在内部使用DirectX,使其快速高效。你也有能力写它,因为它只是一个普通的控制,你可以用它做任何你想做的事。
希望有所帮助:)
答案 1 :(得分:1)
这种视频播放方法使用的某些功能与WinForms不能很好地混合,因此您无法在视频前放置控件并将其组合在准确的UI中。
这是设计行为。您必须提取视频帧并使用常规WinForms API呈现它们,或者使用DirectShow.NET应用您的水印并显示组合视频,原始视频帧和您的徽标合并。
查看有关叠加显示视频的相关问题:
DirectShow.NET的BitmapMixer示例可能会有所帮助:
BitmapMixer是一个如何使用视频绘制视频的示例 VMR9。
此示例主要围绕IVMRMixerBitmap9接口构建。 该接口接受位图作为GDI设备上下文或Direct3D 表面。 Direct3D Surface的主要优点是它 可以使用真正的alpha透明度。 GDI DC不支持 alpha位图和透明度是通过使用颜色键控来完成的。