gpt4 book ai didi

c++ - DirectX 屏幕截图 : Why GetBackBuffer always gives me a black image?

转载 作者:行者123 更新时间:2023-11-28 02:24:46 37 4
gpt4 key购买 nike

我的问题是关于使用 DirectX 捕获全屏图像,无论正在运行什么应用程序。我尝试使用 GetBackBuffer 函数捕获屏幕(因为我被警告说 GetFrontBufferData 非常慢,和 GDI 一样慢)

然而,当我尝试它时,GetFrontBufferData 可以很好地捕获屏幕,但 GetBackBuffer 总是给我一个黑色图像。

有人告诉我,GetBackBuffer 只获取你在屏幕上绘制的内容。如果你什么都不画,你什么也得不到。如果要使用 GetBackBuffer 函数捕获屏幕图像,那是不可能的。是这样吗?

我尝试的代码是:

LPDIRECT3D9 g_pD3D = NULL;
D3DDISPLAYMODE ddm;
D3DPRESENT_PARAMETERS d3dpp;
IDirect3DDevice9 * g_pd3dDevice;
IDirect3DSurface9 * pSurface;
ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
ZeroMemory(&d3dpp, sizeof(d3dpp));
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &ddm);
d3dpp.Windowed = TRUE;
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.BackBufferFormat = ddm.Format;
d3dpp.BackBufferHeight = ddm.Height;
d3dpp.BackBufferWidth = ddm.Width;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = GetDesktopWindow();
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
HRESULT hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(), D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice);
hr = g_pd3dDevice->CreateOffscreenPlainSurface(ddm.Width, ddm.Height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL);
//hr = g_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSurface);//Getbackbuffer gives me a black image
hr = g_pd3dDevice->GetFrontBufferData(0, pSurface);//getfrontbufferdata works well
hr = D3DXSaveSurfaceToFile("d:/1.png", D3DXIFF_PNG, pSurface, NULL, NULL);
pSurface->UnlockRect();
pSurface->Release();
g_pd3dDevice->Release();
g_pD3D->Release();

最佳答案

那些告诉您 GetBackbuffer 只获取您绘制的内容的人说的是实话。每个使用 Direct3D 的应用程序都有自己的后台缓冲区,其中仅包含该应用程序绘制到其中的内容。您的应用程序有自己的后台缓冲区,其中仅包含您的应用程序绘制到其中的内容。

关于c++ - DirectX 屏幕截图 : Why GetBackBuffer always gives me a black image?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128158/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com