2012-10-22 54 views
5

我想插入字幕到媒體文件中,而不使用自動提供它的庫(如DirectShow)在播放媒體文件時是否有任何方法獲取媒體文件的覆蓋?

我使用的方式來使用窗口桌面的繪圖句柄,但它不能工作。我認爲這是因爲更新的速度......對吧? 無論如何,是否有任何功能或方法繪製媒體文件或獲得他們的覆蓋句柄?

[DllImport("user32.dll")] 
    static extern IntPtr GetDesktopWindow(); 

    [DllImport("user32.dll")] 
    static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgn, uint flags); 

    [DllImport("user32.dll")] 
    static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc); 

    public void SubtitleDraw() 
    { 
     IntPtr hWnd = GetDesktopWindow(); 
     IntPtr hDc = GetDCEx(hWnd, IntPtr.Zero, 1027); 

     Font font1 = new Font("Times New Roman", 24, FontStyle.Regular,GraphicsUnit.Pixel);  
     Point pt = new Point(40, 375); 

     PointF pointF1 = new PointF(); 
     pointF1 = PlayerForm.ActiveForm.PointToScreen(pt); 

     Graphics g = Graphics.FromHdc(hDc); 
     g.DrawString(SubtitleText, font1, Brushes.Black, pointF1); 

     ReleaseDC(hWnd, hDc); 
    } 
+0

您能澄清在我回答之前發生的實際媒體播放的位置嗎?它是否在你的一個應用程序表單中,或者在另一個進程中?我問,因爲描述和代碼似乎有點矛盾。你提到不想使用DirectShow這樣的庫,但是你需要一個表單來表示座標,這可能意味着在你的一個表單中出現了回放。如果是這樣,則不需要捕獲桌面句柄本身。 – Frostie

+0

我使用的媒體播放包含在DirectX的AudioVideoPlayback中。暗示播放不在我的表格中......它只是使用控制面板作爲其網站的所有者。其實,我不明白你的回答是關於進程和回放的形式之間的關係(因爲我是新手)。 –

+0

也許尋找單詞「WPF」和「Adorner」可能對你有幫助嗎? – juFo

回答

0

如果您想在任何像樣的幀速率下播放視頻時進行繪製,您將需要研究DirectShow和過濾器。那裏有一些零散的文檔,介紹如何與.NET的DirectShow過濾器圖形進行交互,但它很少。

如果你有一個視頻在媒體控制中播放,它幾乎總是以疊加的方式播放視頻,所以你在它上面繪製的任何東西都會在控制之上,但仍然在「覆蓋「在真正的視頻播放。

相關問題