- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不仅 fps 从 60 下降到 20-21,而且图像看起来像这样扭曲。第二张图应该是这样的
What it looks like What it should look like
if (captureVideo == 1) {
pNewTexture = NULL;
// Use the IDXGISwapChain::GetBuffer API to retrieve a swap chain surface ( use the uuid ID3D11Texture2D for the result type ).
pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), reinterpret_cast< void** >( &pSurface ) );
/* The swap chain buffers are not mapable, so I need to copy it to a staging resource. */
pSurface->GetDesc( &description ); //Use ID3D11Texture2D::GetDesc to retrieve the surface description
// Patch it with a D3D11_USAGE_STAGING usage and a cpu access flag of D3D11_CPU_ACCESS_READ
description.BindFlags = 0;
description.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
description.Usage = D3D11_USAGE_STAGING;
// Create a temporary surface ID3D11Device::CreateTexture2D
HRESULT hr = pDevice->CreateTexture2D( &description, NULL, &pNewTexture );
if( pNewTexture )
{
// Copy to the staging surface ID3D11DeviceContext::CopyResource
pContext->CopyResource( pNewTexture, pSurface );
// Now I have a ID3D11Texture2D with the content of your swap chain buffer that allow you to use the ID3D11DeviceContext::Map API to read it on the CPU
D3D11_MAPPED_SUBRESOURCE resource;
pContext->Map( pNewTexture, D3D11CalcSubresource( 0, 0, 0), D3D11_MAP_READ, 0, &resource );
const int pitch = w << 2;
const unsigned char* source = static_cast< const unsigned char* >( resource.pData );
unsigned char* dest = static_cast< unsigned char* >(m_lpBits);
for( int i = 0; i < h; ++i )
{
memcpy( dest, source, w * 4 );
source += pitch;
dest += pitch;
}
AppendNewFrame(w, h, m_lpBits,24);
pContext->Unmap( pNewTexture, 0);
pNewTexture->Release();
}
}
最佳答案
尽管代码片段不完整,但它显示了几个潜在的问题:
AppendNewFrame
行中的 Number of 24 表明您正在尝试将数据视为 24 位 RGB,而您的数据是 32 位 RGB。这种虐待与所附图片上展示的伪像相符;D3D11_MAPPED_SUBRESOURCE
结构中有效使用了它,您应该使用它。关于c++ - DXGI 屏幕捕获图像失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012364/
深度模板缓冲区资源定义为DXGI_FORMAT_D24_UNORM_S8_UINT格式。 我假设要在该资源中创建着色器资源 View (SRV),需要将 View 格式描述为: DXGI_FORMAT
我设置了一个 DX12 应用程序,该应用程序仅清除每帧的后缓冲区。 它确实是准系统:没有 PSO,没有 root...唯一的特殊性是,它在启动新帧 ( msdn waitable swap chain
不仅 fps 从 60 下降到 20-21,而且图像看起来像这样扭曲。第二张图应该是这样的 What it looks like What it should look like if (captur
我正在尝试通过 TextOut 移动文本 这是代码 IDXGISurface1* g_pSurface1 = NULL; HRESULT hr = pSwapChain->GetBuffer(0, _
使用 DXGI,我可以获得所有显卡的列表。 IDXGIFactory* factory; vector all_adapters; HRESULT result(S_FALSE); result =
我正在用 DirectX 12 处理的空白交换链填充一个窗口。在使用 Explicit Multi-Adapter 玩一圈时,我遇到了这种奇怪的行为...... 如目前存在的几乎所有 DX12 演示代
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我发现使用翻转模型(DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 或 DXGI_SWAP_EFFECT_FLIP_DISCARD)创建的交换链被锁定到 VSync(1/60 秒),
https://msdn.microsoft.com/en-us/library/windows/desktop/bb174562(v=vs.85).aspx 根据 IDXGIResource::Ge
https://msdn.microsoft.com/en-us/library/windows/desktop/bb174562(v=vs.85).aspx 根据 IDXGIResource::Ge
因此,我一直在学习创建直接 x 窗口的教程。运行教程代码发现 here我收到 DXGI.h 文件的一系列错误。主要是一系列的: C:\Program Files (x86)\Microsoft Dir
我正在使用 AcquireNextFrame 来截取我的桌面。是否可以在设置中设置我想要的输出图像的尺寸?我在文档中看到这个函数 IDXGIOutput::SetDisplaySurface 可以提供
我正在尝试使用 C++ 查询 Windows 机器以获得可用显卡的列表。 这个 SO 问题有一个答案(来自 moxize),它提供了一种方法(d3d9.h): get-the-graphics-car
我目前正在尝试使用 DirectX 创建一些基本的,但我目前卡住了,因为我似乎无法找到外部符号“CreateDXGIFactory2”。 我已经包含了库“dxgi.lib”,但找不到外部符号。我也查看
当我将其中一台显示器切换到全屏模式时,有时其他显示器会变成黑色并且不显示任何内容。是我做错了什么还是只是一些错误? 我创建了一个窗口,然后创建了一个绑定(bind)到该窗口的交换链。我用第一个参数 t
我正在调用这个方法: http://msdn.microsoft.com/en-us/library/dd371264(VS.85).aspx 调用失败并返回 E_NOINTERFACE。该文档对于为
我需要将 DXGI_FORMAT_R32G32B32A32_TYPELESS 类型的 ID3D11Texture2D 纹理有效地转换为 DXGI_FORMAT_B8G8R8A8_TYPELESS 类型
我想了解 DXGI 桌面复制。我已经阅读了很多,这是我从 Microsoft 网站上的 DesktopDuplication 示例部分复制的代码。我的计划是从 DesktopImage 获取 Buff
刚刚在尝试获取可用的显示模式时遇到了一个奇怪的问题。让我解释一下... 首先,我枚举可用的适配器,然后推送到 std::vector,这工作正常: for(UINT i = 0; pFactory->
我有一个使用 DXGI 桌面复制 API 捕获桌面屏幕的程序。 我使用 IDXGIOutputDuplication::AcquireNextFrame 获取帧,并且能够逐帧捕获我的桌面。 为了继续前
我是一名优秀的程序员,十分优秀!