如何使用DirectShow API捕获除捕获应用程序之外的桌面位图?

时间:2016-09-12 11:56:32

标签: video bitmap screenshot directshow gdi

我想捕获应用程序下面的屏幕位图。 我的应用程序是顶级窗口。 我在stackoverflow上找到了一篇帖子: - How can I capture screen under my own window excluding my own window

我已按照上述帖子的最后一个答案,但在捕获过程中我的捕获应用程序一直闪烁。

是否有任何解决方案可以使用DirectShow API在我的顶级捕获应用程序下捕获屏幕位图而不会导致闪烁? 捕获的视频预计不包含我的捕获应用程序的任何GUI元素。

1 个答案:

答案 0 :(得分:1)

这实际上与之前的问题How can I omit capturing of a button/region using DirectShow APIs?重复,您可以通过添加新的详细信息和链接参考来扩展该问题。

然而,DirectShow API不提供任何桌面捕获功能。它的CPushSourceDesktop Sample确实提供了一个接近的东西:它证明了使用GDI API获得的桌面图像可以使用DirectShow作为视频流式传输。也就是说,无论如何都没有使用DirectShow API进行桌面捕获。

使用GDI,您需要强制窗口重绘为应用程序UI下方的窗口。您可以通过隐藏应用程序来实现此目的,从而避免闪烁。其他方法涉及绘制到辅助DC中的请求,这对所有应用程序都不适用,并且要求您自己从单独的窗口执行图像合成 - 然后您可以使用DirectShow流式传输结果。