|
|
程序代码如下:
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;
}
请问我的问题出现在哪里?
谢谢!
|
|