首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将IDirect3DSurface9或LPD3DXBUFFER作为JPG保存到内存中

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

Stack Overflow用户
提问于 2014-05-11 10:41:55
回答 1查看 2K关注 0票数 1

我想捕捉游戏截图,我有代码:

代码语言:javascript
复制
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保存到文件可以很好,但是我想保存捕获的图像并将它们写到磁盘上的另一个文件的末尾,而不是创建新的一次。有没有办法将IDirect3DSurface9LPD3DXBUFFER转换为JPG字节?

EN

回答 1

Stack Overflow用户

发布于 2014-05-11 11:46:32

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

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23591608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档