gpt4 book ai didi

directx - 使用 DirectX 的桌面捕获不起作用

转载 作者:行者123 更新时间:2023-12-02 06:50:15 35 4
gpt4 key购买 nike

由于D3DPOOL_SCRATCH处理速度较慢,所以我编写了桌面捕获程序以引用网上的报告。然而,结果却是一片漆黑的画面。这是控制台程序的结果还是有其他原因?

#include <stdio.h>
#include <Windows.h>
#include <d3d9.h>

void main()
{
CoInitialize(NULL);

LPDIRECT3D9 d3d9;
LPDIRECT3DDEVICE9 d3ddev;
d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

int ww = GetSystemMetrics(SM_CXSCREEN);
int wh = GetSystemMetrics(SM_CYSCREEN);

HWND hwnd = GetDesktopWindow();
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = ww;
d3dpp.BackBufferHeight = wh;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.hDeviceWindow = hwnd;
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;

d3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);

IDirect3DSurface9* render;
IDirect3DSurface9* dest;
d3ddev->CreateOffscreenPlainSurface(ww, wh, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &dest, NULL);
d3ddev->GetRenderTarget(0, &render);
d3ddev->GetRenderTargetData(render, dest);

D3DLOCKED_RECT bits;
dest->LockRect(&bits, NULL, D3DLOCK_READONLY);

// If a capture is successful, colors other than black(0x00000000) should enter.
for(int i = 0; i < 100; i++){
printf("%02X ", *((BYTE*)bits.pBits + i));
}

dest->UnlockRect();

render->Release();
dest->Release();
d3ddev->Release();
d3d9->Release();

CoUninitialize();
}

最佳答案

这与应用程序类型无关,如果你想获取桌面图像的数据,你应该使用以下函数

GetFrontBufferData

所以不要打电话

d3ddev->GetRenderTarget(0, &render);
d3ddev->GetRenderTargetData(render, dest);

你应该打电话

d3ddev->GetFrontBufferData(0, dest);

关于directx - 使用 DirectX 的桌面捕获不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12859894/

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