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();