我一直在搜索如何截取使用全屏幕的遊戲並使用OpenGL。如果我使用CopyFromScreen或BitBlt,則遊戲屏幕不會出現,我只會看到遊戲背後的內容。 我讀過一些關於這個教程,但它們涉及DLL掛鉤和一些C++。 有沒有使用純粹的C#做到這一點的方法? (或者用一些調用...)用C使用OpenGL截取屏幕截圖#
2
A
回答
1
除非要使用鉤子DLL,否則使用屏幕的HDC(將NULL傳遞給GetDC函數)的BitBlt是最佳選擇。如果這樣做不起作用,您還剩下幾個選項。
glReadPixels不會像這樣工作。您需要將應用程序的GL上下文作爲線程中的當前上下文,否則您會得到最好的黑色圖像,並且會出現平均情況下的分段錯誤。 wglShareLists或wglCopyContext等也不會幫助您,因爲您只能在相同的過程內共享上下文。
這就是DLL掛鉤進來的地方。基本上,你製作一個DLL,它將被放置在程序的文件夾中,該文件夾導出與OpenGL DLL相同的符號,並簡單地將它們全部轉發到原始文件(簡單地說吧! 。
但是,對於SwapBuffers,你會做的更多一點。你會先把這個功能轉到原來的,然後做你的glReadPixels。碰巧,當這個函數被調用時,GL上下文在你的線程中一定是最新的,所以它會起作用。此外,由於SwapBuffers剛剛完成其工作,因此可以保證所有屬於前一幀的繪製調用都已完成,並且完整的圖像現在位於前端緩衝區中。
相關問題
- 1. C++截取屏幕截圖
- 2. 使用c#截取屏幕截圖使用c#
- 3. 截取屏幕截圖
- 4. 在iOS 8中使用Objective C截取屏幕截圖doesn'work
- 5. C++屏幕截圖
- 6. 在C中使用selenium webdriver截取屏幕截圖時的空白截圖#
- 7. SpriteKit屏幕截圖的屏幕截圖
- 8. 在Android中使用移動圖像截取屏幕截圖
- 9. webdriverio - 截取整頁的屏幕截圖
- 10. Phantomjs - 截取網頁的屏幕截圖
- 11. 在Rails中截取屏幕截圖
- 12. Windows 8 cli截取屏幕截圖
- 13. 屏幕截圖
- 14. C++ Windows屏幕截圖
- 15. 屏幕截圖的C++ CLI
- 16. MFC C++屏幕截圖
- 17. 使用screencap實用程序獲取屏幕截圖時的屏幕截圖使用screencap實用程序獲取屏幕截圖
- 18. 使用html5/javascript截取整個屏幕的截圖?
- 19. 使用pyside截取iFrame的屏幕截圖
- 20. 使用HTML5/Canvas/JavaScript在瀏覽器中截取屏幕截圖
- 21. 如何使用CameraView在Android中截取屏幕截圖(SurfaceView)
- 22. ffmpeg獲取屏幕截圖
- 23. ffmpeg用於屏幕截圖?
- 24. 用c安卓android屏幕截圖#
- 25. 向C#位圖繪製一個OpenGL場景;屏幕截屏
- 26. 使用ScreenCapture捕獲屏幕截圖並捕獲屏幕截圖.CaptureScreenshot
- 27. Webdriver屏幕截圖
- 28. UIWebView屏幕截圖
- 29. iPhone屏幕截圖
- 30. Roku屏幕截圖
我試過使用BitBlt函數,但是當遊戲處於全屏模式時,屏幕截圖只顯示桌面和左上角的黑色方塊。如果遊戲處於窗口模式,則它可以正常工作。這裏是我使用的代碼:http://pastebin.com/1k8eVzQc – Ivan 2011-03-09 12:24:15