Memory Directx Backbuffer捕获

Memory Directx Backbuffer捕获,memory,graphics,directx,capture,directx-9,Memory,Graphics,Directx,Capture,Directx 9,我想使用“memcpy”功能将我的Directx屏幕从backbuffer捕获到内存地址。 所以我写了以下代码: int ScreenWidth =1024; int ScreenHeight =768; int BITSPERPIXEL =32; // XRGB BYTE* pBits ; IDirect3DSurface9* pSurface; pBits=new BYTE[ScreenWidth*ScreenHeight * 4 ]; //1024 x 768 x 4 for XRGB

我想使用“memcpy”功能将我的Directx屏幕从backbuffer捕获到内存地址。 所以我写了以下代码:

int ScreenWidth =1024;
int ScreenHeight =768;
int BITSPERPIXEL =32; // XRGB

BYTE* pBits ;
IDirect3DSurface9* pSurface;

pBits=new BYTE[ScreenWidth*ScreenHeight * 4 ]; //1024 x 768 x 4 for XRGB

pd3dDevice->CreateOffscreenPlainSurface(ScreenWidth , ScreenHeight ,
                                          D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, 
                                          &pSurface, NULL);

pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE::D3DBACKBUFFER_TYPE_MONO, &pSurface);      


D3DLOCKED_RECT lockedRect;
pSurface->LockRect(&lockedRect,NULL,
                   D3DLOCK_NO_DIRTY_UPDATE|
                   D3DLOCK_NOSYSLOCK|D3DLOCK_READONLY);
for( int i=0 ; i < ScreenHeight ; i++)
{
    memcpy( (BYTE*) pBits + i * ScreenWidth * BITSPERPIXEL / 8 , 
        (BYTE*) lockedRect.pBits + i* lockedRect.Pitch , 
        ScreenWidth * BITSPERPIXEL / 8);
}
pSurface->UnlockRect();
这一行的程序中断:

 memcpy( (BYTE*) pBits + i * ScreenWidth * BITSPERPIXEL / 8 , 
        (BYTE*) lockedRect.pBits + i* lockedRect.Pitch , 
        ScreenWidth * BITSPERPIXEL / 8);
它与lockedRect.pBits或lockedRect.Pitch address mem相同。未创建。。。。 你怎么想? 请帮我解决这个问题。
谢谢。

您使用D3DMEM\U池了吗?您确定backbuffer格式为X8A8R8B8吗?

您是否使用了D3DMEM_池?您确定backbuffer格式为X8A8R8B8吗?

正在尝试找到相同的答案。从一些资料中,我可以看出后台缓冲区是特定于应用程序的。i、 他们在绑定到他们的后缓冲区上写入数据


我试图找出GetBackBuffer()中的第一个参数在哪里起作用?是伊斯瓦普查因。MSDN帮助很少。

试图找到同样的答案。从一些资料中,我可以看出后台缓冲区是特定于应用程序的。i、 他们在绑定到他们的后缓冲区上写入数据

我试图找出GetBackBuffer()中的第一个参数在哪里起作用?是伊斯瓦普查因。MSDN帮助很少

 memcpy( (BYTE*) pBits + i * ScreenWidth * BITSPERPIXEL / 8 , 
        (BYTE*) lockedRect.pBits + i* lockedRect.Pitch , 
        ScreenWidth * BITSPERPIXEL / 8);