2017-04-13 70 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位圖,透明度通過使用顏色鍵控來實現。