带有视频的窗口截图

Posted

技术标签:

【中文标题】带有视频的窗口截图【英文标题】:Screenshot of window with video 【发布时间】:2019-02-08 13:10:32 【问题描述】:

在我的应用程序中,我使用 Media Foundation 来渲染来自网络摄像头的视频。带有视频的窗口是应用程序窗口的一部分,我想以编程方式将其作为一个整体进行截图。现在我正在尝试使用经典方法进行屏幕截图(将窗口的 dc 复制到位图),但视频窗口已从图片中排除。

PS1:当我使用 Print Screen 按钮为整个应用程序拍照时,它可以工作。包括视频窗口。

PS2:据我了解,Media Foundation 使用 Direct3D 11 来渲染视频。

【问题讨论】:

除非使用过滤器驱动程序否则不可能 afaik。 【参考方案1】:

您应该使用 Desktop Duplication API 来捕获屏幕截图。复制 DC 是传统方法而不是经典方法,它可以出于充分的理由排除视频部分。

DirectX Screen Capture - Desktop Duplication API - limited frame rate of AcquireNextFrame

请注意,如果播放器或应用程序明确要求将内容视为受保护内容(例如,启用 DRM 的视频播放应用程序或启用 DRM 的内容的媒体播放器就是这种情况),即使桌面复制也可以排除部分内容。

【讨论】:

感谢您的回答。但我一点也不聪明。有没有什么简单的方法可以在按下 PrintScreen 键后调用 Windows 调用的某些“屏幕截图功能”? Windows 是否使用此桌面复制 API? 我不知道 Print Screen 处理程序究竟做了什么,那么它不一定是您可用的方法。已知桌面复制运行良好,然后可以使用例如 WIC API 将图像保存到文件中(其他选项也可用,因为在某些时候您将保存 32 位 RGB 像素)。 桌面复制 API 的什么方法应该用于只为一个窗口(或最终整个桌面)拍照。我所能找到的只是我应该使用我无法获得的接口的 AcquireNextFrame 方法。 AcquireNextFrame 为您提供一台显示器的图像,而不是窗口和桌面。我上面链接的问题给出了有关使用此方法获取接口的 API 的提示。

以上是关于带有视频的窗口截图的主要内容,如果未能解决你的问题,请参考以下文章

C#制作截图软件时,怎样不截取软件窗口本身? 看下图:软件自身也被截下来了

Shutter - 带有众多功能的屏幕截图工具

使用ffmpeg进行视频截图

opencv怎么截取视频图片

chrome自带的截图

chrome自带的截图