DirectX当中有两个接口:
IDirect3DDevice9::GetFrontBufferData
IDirect3DDevice9::GetBackBuffer
他们在使用上有很大的差别
GetFrontBufferData
返回的是FrontBuffer的一个A8R8G8B8格式的copy体
Surface的大小是桌面的大小, 不是应用窗口的大小
他的执行速度非常慢,但是是唯一的可以把antialiasing效果截取下来的方法
GetBackBuffer
返回的是swap-chain的引用
surface的大小是viewport的大小
返回的格式是和设备创建的格式一样的,不应是A8R8G8B8的格式
这点对抓屏保存很重要, 安全的做法是做一个格式转换
附件是一个测试他们差异而做的截屏例子的源码
转载于:https://blog.51cto.com/home3d/1181342