C# 有什么方法可以在播放媒体文件时获得媒体文件的覆盖?

C# 有什么方法可以在播放媒体文件时获得媒体文件的覆盖?,c#,media,subtitle,C#,Media,Subtitle,我想在媒体文件中插入字幕,而不使用自动提供字幕的库(如DirectShow) 我曾经使用Windows桌面的绘图手柄进行绘图,但它无法工作。我认为这是因为更新的速度。。。正确的? 无论如何,是否有任何函数或方法可以在媒体文件上绘制或获取其覆盖句柄 [DllImport("user32.dll")] static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")] static extern In

我想在媒体文件中插入字幕,而不使用自动提供字幕的库(如DirectShow)

我曾经使用Windows桌面的绘图手柄进行绘图,但它无法工作。我认为这是因为更新的速度。。。正确的? 无论如何,是否有任何函数或方法可以在媒体文件上绘制或获取其覆盖句柄

    [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);
    }

如果你想在任何合适的帧速率下播放视频时在视频上画图,你需要研究DirectShow和过滤器。关于如何与.NET中的DirectShow过滤器图交互,有一些分散的文档,但这是非常稀少的


如果您在媒体控件中播放视频,它几乎总是在覆盖层中播放视频,因此您在其“顶部”绘制的任何内容都将位于控件顶部,但仍位于播放真实视频的“覆盖层”下方。

在我回答之前,您能澄清实际媒体播放的位置吗?它是在您的一个申请表中,还是在另一个流程中?我这样问是因为描述和代码似乎有点矛盾。您提到不想使用诸如DirectShow之类的库,但您在表单中查找坐标,这可能意味着回放正在其中一个表单中进行?如果是这样的话,就不需要捕获桌面句柄本身。我使用的媒体播放包含在DirectX的音频视频播放中。这意味着播放已超出我的范围。。。它只是使用控制面板作为其网站的所有者。事实上,我无法理解你关于过程和回放形式之间关系的答案(因为我是新手)。也许搜索“WPF”和“Adorner”这两个词会对你有所帮助?