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