2014-01-26 69 views
1

我试图采取在OpenGL创建一个游戏..如何采取游戏截图用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 ..

我怎么能这样做,以便能够实时采取截图,没有得到黑屏?

+0

你在Windows上吗?在从Windows Vista开始的全屏模式下,尝试捕获前端缓冲区(包括内置的Alt + PrintScreen)的任何内容都会出现问题。最简单的解决方案是将您的缓冲区交换行为更改为Copy Swap('PFD_SWAP_COPY',速度较慢但可以保证正常工作)。通常,如果在制作全屏模式切换后Alt + TAB出现并返回,将会修复该切换;尽管我从来没有能够解释这一点;)如果你没有在问题中编写游戏,那么如果你想使用该代码,第二种解决方案可能是你唯一的选择。 –

回答

2

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

Windows Vista引入了合成,其中每个窗口都位于其自己的屏幕外存储区中,并且不与其他窗口交互。因此,您只能在清除了屏幕外缓冲区的黑色窗口中看到这些内容。

我该怎么做才能在没有黑屏的情况下实时截屏?

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

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

+0

我会试试这个,ty。 –