hs_491 | 电梯直达 1楼 发表于 2006-5-15 17:57:00 | 只看该作者
游戏程序
平台类型: | |
---|
程序设计: | |
---|
编程语言: | |
---|
引擎/SDK: | |
---|
程序代码如下: void GetScreenBuf (BYTE *buff, int width, int height) { LPDIRECT3DSURFACE8 back = NULL;
// 获得BackBuffer的D3D Surface LPBYTE tmp = new BYTE[width*height*4]; HRESULT hr; hr = g_pd3dDevice->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &back);
D3DLOCKED_RECT lr; back->LockRect(&lr, NULL, 0);
memcpy( tmp, (BYTE*)lr.pBits, width*height*4 );
back->UnlockRect();
// 释放Surface,防止内存泄漏 back->Release(); back = NULL; delete[] tmp; }
我想得到Render之前的数据,但是运行到memcpy时出现错误? 而且用back->LockRect(&lr, NULL, 0);,得到的lr,两个值都为0.可能是没有锁定,不知道为什么?
但用下面程序,却可以保存成BMP文件. void ScreenShot (char *filename, int width, int height) { LPDIRECT3DSURFACE8 back = NULL;
// 获得BackBuffer的D3D Surface g_pd3dDevice->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &back);
// Copy一下,,需要时转换颜色格式 //D3DXLoadSurfaceFromSurface(tmp, NULL, NULL, back, NULL, NULL, D3DX_FILTER_NONE, 0);
// 保存成BMP格式 D3DXSaveSurfaceToFile(filename, D3DXIFF_BMP, back, NULL, NULL);
// 释放Surface,防止内存泄漏 //tmp->Release(); //tmp = NULL; back->Release(); back = NULL; }
请问我的问题出现在哪里? 谢谢! |
|