想要编写一个屏幕截图录制应用程序,我从哪里开始?

时间:2015-09-05 03:07:53

标签: opengl screen screen-capture

我想开始编写可以捕获屏幕内容或捕获特定全屏应用内容的应用程序,但我不知道从哪里开始。

理想情况下,这将使用OpenGL编写,但我不知道OpenGL捕获应用程序屏幕内容的功能。如果我可以使用OpenGL来捕捉,那就说“魔兽世界”,这将是完美的。

1 个答案:

答案 0 :(得分:3)

  

OpenGL捕获应用程序屏幕内容的功能

不存在。 OpenGL是一个用于在屏幕上显示的API。只有一个函数可以从OpenGL(glReadPixels)中检索回来的像素,并且它只被断言用于由调用glReadPixels的非常OpenGL上下文绘制的内容;除了屏幕外的FBO之外的任何东西都是非常不可靠的,因为操作系统可以随时破坏,清除或以其他方式改变主窗口的帧缓冲内容。

请注意,您可以找到有关如何使用散布在互联网上的OpenGL屏幕截图的几个教程。并且它们都不适用于现代计算机系统,因为它们所依赖的未定义行为(屏幕上的所有窗口共享GPU的一个大的连续区域扫描帧缓冲区)在现代图形系统中不再成立(窗口拥有自己独立的,独立的一组帧缓冲区和屏幕上的图像由那些合成。

捕获屏幕内容是一项高度运行的系统依赖任务,并且没有关于如何处理它的灵丹妙药。一些系统提供随时可用的屏幕捕获API;但是,根据性能要求,这些屏幕捕获API可能不是最佳选择。一些捕获程序将DLL注入到每个进程中,以便在生成的图像的源处进入渲染过程。并且一些屏幕捕获系统安装定制内核驱动程序以访问图形卡视频扫描输出缓冲区(通常映射到系统地址空间),绕过显卡驱动程序以复制内容。