DirectX当中有两个接口:

     IDirect3DDevice9::GetFrontBufferData

     IDirect3DDevice9::GetBackBuffer

他们在使用上有很大的差别

 

GetFrontBufferData

     返回的是FrontBuffer的一个A8R8G8B8格式的copy体

     Surface的大小是桌面的大小, 不是应用窗口的大小

     他的执行速度非常慢,但是是唯一的可以把antialiasing效果截取下来的方法

GetBackBuffer

     返回的是swap-chain的引用

     surface的大小是viewport的大小

     返回的格式是和设备创建的格式一样的,不应是A8R8G8B8的格式

         这点对抓屏保存很重要, 安全的做法是做一个格式转换

附件是一个测试他们差异而做的截屏例子的源码