如何使用OpenGL截取游戏截图

时间:2014-01-26 00:14:02

标签: c# opengl process screenshot

我正在尝试截取在OpenGL中创建的游戏的截图..

我有这段代码:

_captureProcess.BringProcessWindowToFront();
ScreenCapture sc = new ScreenCapture();
Image img = sc.CaptureWindow(_process.MainWindowHandle);

来自:http://www.developerfusion.com/code/4630/capture-a-screen-shot/

IntPTR是正确的! 但是图像完全是黑色的!

_process =全屏游戏,OPENGL ..

如何在不获取黑屏的情况下实时截取屏幕截图?

1 个答案:

答案 0 :(得分:2)

您链接的代码示例取决于在Windows中可以找到的未定义行为,直到并包括Windows XP:如果您创建或移动窗口到顶部并阻止其重绘,它将接收下面所有内容它。这种行为已被指定,但很多人都利用它。

Windows Vista引入了合成,其中每个窗口都位于其自己的屏幕外存储区域,并且不与其他窗口交互。因此,你所看到的只是在一个被清除的屏幕外缓冲区黑色的窗口中。

  

如何在不获取黑屏的情况下实时截取屏幕截图?

使用Windows提供的适当API,即用于在Vista及更高版本中截取屏幕截图的DWM API。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540(v=vs.85).aspx