2017-04-13 92 views
-1

我使用这个样本代码 https://www.codeproject.com/Articles/2632/DirectShow-MediaPlayer-in-C 而只需要一点点change.i尝试在IVideoWindow前面添加图片框,但PictureBox的是ALWAYSE背后IVideoWindow.i利用家长和bringfront但非前他们工作。我只需要在视频前将图片显示为徽标或水印。添加图片框在IVideoWindow

+1

视频以视频叠加播放,允许播放器卸载解码视频流的繁重工作,并将像素爆炸至GPU。您只能通过自己创建叠加层来超越叠加层。易于在Winforms中使用TransparencyKey属性。示例代码保持窗体在正确的位置[在这里](http://stackoverflow.com/a/4503371/170340)。 –

回答

1

DirectShow和您正在使用的整个软件包(即Windows窗体)确实很旧。首先让我告诉你发生了什么。 DirectShow和所有其他DirectX图形包如Direct3D直接与图形卡一起工作,并直接在显示器上绘制图层,Windows甚至没有意识到,更不用说在它上面画东西了。因此,除非您使用DirectX在您创建初始窗口的相同设备中呈现要显示的内容,否则无法完成此操作。

好的,那么解决方案是什么?

我不知道你在做什么,但很多年前我用WPF和它WritableBitmap呈现从IP摄像机接收到的图像屏幕。 WPF在DirectX内部工作,使其快速高效。你也有能力写下它,因为它只是一个正常的控制,你可以随心所欲地做任何事情。

希望它能帮助:)

1

视频播放的该方法使用不与的WinForms拌匀一定的能力,所以你不能把一个控制在视频前,在准确的UI结合这一点。

这是设计行为。您必须提取视频帧并使用常规的WinForms API呈现它们,或者使用DirectShow.NET应用您的水印,并显示组合视频,将原始视频帧与徽标合并。

请参阅有关覆盖显示的视频的相关问题:

DirectShow.NET的BitmapMixer样品可能会有所帮助:

BitmapMixer是如何使用VMR9使用 来绘制视频的示例。

此示例主要围绕IVMRMixerBitmap9接口构建。 此接口接受位图作为GDI设备上下文或作为Direct3D Surface。 Direct3D Surface的主要优势在于它可以使用真正的Alpha透明度。 GDI DC不支持 alpha位图,透明度通过使用颜色键控来实现。