C++ 如何将IDirect3DSurface9或LPD3DXBUFFER保存到内存中作为JPG

C++ 如何将IDirect3DSurface9或LPD3DXBUFFER保存到内存中作为JPG,c++,jpeg,directx-9,C++,Jpeg,Directx 9,我正在尝试捕获游戏截图,我有以下代码: LPDIRECT3DDEVICE9 Device; D3DSURFACE_DESC screenDescription; ... void Capture(){ IDirect3DSurface9* pRenderTarget; IDirect3DSurface9* pDestTarget; Device->GetRenderTarget(0, &pRenderTarget); pRenderTarget

我正在尝试捕获游戏截图,我有以下代码:

LPDIRECT3DDEVICE9 Device;
D3DSURFACE_DESC screenDescription;

...

void Capture(){
    IDirect3DSurface9* pRenderTarget;
    IDirect3DSurface9* pDestTarget;

    Device->GetRenderTarget(0, &pRenderTarget);
    pRenderTarget->GetDesc(&screenDescription);

    Device->CreateOffscreenPlainSurface(screenDescription.Width, screenDescription.Height, screenDescription.Format, D3DPOOL_SYSTEMMEM, &pDestTarget, NULL);
    Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_FORCE_DWORD, &pDestTarget);

    char tName[200];
    sprintf(tName, "%s_%d.jpg", "C:\\test", GetTickCount());
    D3DXSaveSurfaceToFileA(tName, D3DXIFF_JPG, pDestTarget, NULL, NULL);

    //LPD3DXBUFFER buffer;
    //D3DXSaveSurfaceToFileInMemory(&buffer, D3DXIFF_JPG, pDestTarget, NULL, NULL);

    pRenderTarget->Release();
    pDestTarget->Release();

    isCapturing = false;
}

使用
D3DXSaveSurfaceToFileA
保存到文件非常有效,但我希望保存捕获的图像并将其写入磁盘上另一个文件的末尾,而不是创建一个新的文件。
有没有办法将
IDirect3DSurface9
LPD3DXBUFFER
转换为JPG字节?

好的,我找到了这段代码,他工作:

LPD3DXBUFFER buffer;
D3DXSaveSurfaceToFileInMemory(&buffer, D3DXIFF_JPG, pDestTarget, NULL, NULL);
DWORD imSize = buffer->GetBufferSize();
void* imgBuffer = buffer->GetBufferPointer();

std::fstream out;
out.open(tName, std::ios_base::binary | std::ios_base::out);
out.write((char*)imgBuffer, imSize);
out.clear();
out.close();