我一直在搜索如何截取使用全屏幕的游戏并使用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