C++ D3D11 C+中的屏幕捕获+;
是否可以在D3D11中制作DirectX应用程序(例如游戏)的屏幕截图 我可以在DirectX 9或API挂钩(IDXGISwapChain::Present)中轻松实现,但在DirectX 11中不可能实现 我初始化D3D11并使用游戏窗口(FindWindow())创建交换链, 然后我得到了一个后缓冲 然后 ID3D11Texture2D::GetDesc() 用在 ID3D11Device::CreateTexture2D(), 然后 ID3D11DeviceContext::CopyResource() 这给了我一个新的ID3D11Texture2D资源 当我用像D3DX11SaveTextureToFile()这样的常用方法保存它时,我总是得到一个黑色图像 我忘了什么C++ D3D11 C+中的屏幕捕获+;,c++,directx-11,d3dx,C++,Directx 11,D3dx,是否可以在D3D11中制作DirectX应用程序(例如游戏)的屏幕截图 我可以在DirectX 9或API挂钩(IDXGISwapChain::Present)中轻松实现,但在DirectX 11中不可能实现 我初始化D3D11并使用游戏窗口(FindWindow())创建交换链, 然后我得到了一个后缓冲 然后 ID3D11Texture2D::GetDesc() 用在 ID3D11Device::CreateTexture2D(), 然后 ID3D11DeviceContext::CopyRe
谢谢。我想这里有两个步骤来检查您的代码:
HRESULT D3DX11SaveTextureToFile(
ID3D11DeviceContext *pContext,
_In_ ID3D11Resource *pSrcTexture,
_In_ D3DX11_IMAGE_FILE_FORMAT DestFormat,
_In_ LPCTSTR pDestFile
);
我认为这里有两个步骤来检查您的代码:
HRESULT D3DX11SaveTextureToFile(
ID3D11DeviceContext *pContext,
_In_ ID3D11Resource *pSrcTexture,
_In_ D3DX11_IMAGE_FILE_FORMAT DestFormat,
_In_ LPCTSTR pDestFile
);
这是可能的,但不是微不足道的,因为您必须执行您提到的API挂钩。OBS项目可能“在其代码中的某个地方”实现了这一点。另外,如果您的目标是Windows 8客户端,那么桌面复制API就是一种方法:OBS使用我引用的钩子(DXGICapture.cpp文件)。这很容易,就像使用DirectX9一样,但我不明白为什么使用DirectX11的类似方法会显示黑色图像它是黑色的可能是因为CopyResource失败,您可以尝试使用dx控制面板强制调试层,并获取更多有关其失败原因的信息。请查看的实现,因为您可能只是错过了一个解决步骤。也就是说,请记住,API挂钩在a/V软件中看起来很像恶意软件。还要注意的是,D3DX11是并且有许多永远不会被修复的错误。这是可能的,但不是微不足道的,因为您必须执行您提到的API挂钩。OBS项目可能“在其代码中的某个地方”实现了这一点。另外,如果您的目标是Windows 8客户端,那么桌面复制API就是一种方法:OBS使用我引用的钩子(DXGICapture.cpp文件)。这很容易,就像使用DirectX9一样,但我不明白为什么使用DirectX11的类似方法会显示黑色图像它是黑色的可能是因为CopyResource失败,您可以尝试使用dx控制面板强制调试层,并获取更多有关其失败原因的信息。请查看的实现,因为您可能只是错过了一个解决步骤。也就是说,请记住,API挂钩在a/V软件中看起来很像恶意软件。还要注意的是,D3DX11是,并且有一些永远不会被修复的bug。