将面板句柄绘制到位图
Posted
技术标签:
【中文标题】将面板句柄绘制到位图【英文标题】: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 对我来说似乎更强大,支持的编解码器种类更多。最后一部分显示捕获。视频被渲染到面板上,我的想法,将面板内容保存到位图,不起作用。 【参考方案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");
【讨论】:
这正是我尝试过的以及在这种情况下不起作用的方法。以上是关于将面板句柄绘制到位图的主要内容,如果未能解决你的问题,请参考以下文章