【问题标题】:Drawing a Panels Handle to a Bitmap将面板句柄绘制到位图
【发布时间】:2021-12-13 00:22:48
【问题描述】:

我有一个托管 WinformsPanel 的 WPF 应用程序

<WindowsFormsHost>
    <windowsForms:Panel 
        x:Name="PlayerHost">
    </windowsForms:Panel>
<WindowsFormsHost>

然后我使用此面板显示视频。我正在使用Mpv.NET lib 来执行此操作。 视频播放器已正确初始化:

//panel.Handle is the windowsForms:Panel named PlayerHost 
player = new MpvPlayer(panel.Handle, Common.IO.FindLib.FindMpvLib(binaryPath));
player.Load(videoFilePath);

现在,如果我尝试绘制面板内容,生成的图像仍然是空白的。绘制图像的代码如下:

using (var bmp = new Bitmap(panel.ClientSize.Width, panel.ClientSize.Height))
{
    panel.DrawToBitmap(bmp, panel.ClientRectangle);
    bmp.Save(@"Some:\path.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
}

为了清楚起见:视频会显示出来。我可以看到视频内容。当媒体正确加载时,我开始绘制图像。我什至将绘图命令卸载到单击按钮。因此,当视频运行时,我尝试进行“帧捕获”,可以这么说。但是图像仍然是空白的。

如何捕获面板内容?它与提供给视频播放器的本机句柄有关吗?提前致谢。

【问题讨论】:

  • 仅供参考,您可以直接在 WPF 表单中显示视频 - 您不需要为此托管表单面板。 --- 这里没有关于您如何实际尝试捕获帧的信息。
  • 你是说媒体元素? Mpv 对我来说似乎更强大,支持的编解码器种类更多。最后一部分显示捕获。视频被渲染到面板上,我的想法,将面板内容保存到位图,不起作用。

标签: c# wpf winforms mpv


【解决方案1】:

您可以使用以下代码将面板内容保存到位图:

using (Bitmap b = new Bitmap(panel.Width, panel.Height))
{
    panel.DrawToBitmap(b, new Rectangle(0, 0, b.Width, b.Height));
    b.Save("test.png");
}

【讨论】:

  • 这正是我尝试过的以及在这种情况下不起作用的方法。
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多