2014-01-26 71 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。 –