0
我想在C++中做一个简单的代码来制作截图并获得像素(RGB)的缓冲区。 我使用的是DirectX,但出现了分段错误。我遵循我发现的一些代码,但没有。截图桌面DirectX C++/QT
这里是我的代码:
static void* pBits;
static IDirect3DDevice9* g_pd3dDevice;
void Screenshot::dxCaptureScreen() {
IDirect3DSurface9* pSurface;
g_pd3dDevice->CreateOffscreenPlainSurface(_screenWidth, _screenHeight, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL); //Segfault here.
g_pd3dDevice->GetFrontBufferData(0, pSurface);
D3DLOCKED_RECT lockedRect;
pSurface->LockRect(&lockedRect, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_NOSYSLOCK | D3DLOCK_READONLY);
for (int i = 0; i < _screenHeight; i++) {
memcpy((BYTE*)pBits + i * _screenWidth * 32/8, (BYTE*) lockedRect.pBits + i * lockedRect.Pitch, _screenWidth * 32/8);
}
pSurface->UnlockRect();
pSurface->Release();
}
有人能帮助我吗?
谢谢你的回答。我在QT中知道这种方式,问题是我想调用这个函数很多,并通过套接字发送图像来模拟其他设备中的镜像。所以我在寻找效率......我想使用DirectX – DevAndroid
@DevAndroid,你可能会发现发送图像和/或压缩它们将花费比截图更长的时间,并且在开发解决方案后会更好地考虑优化用Qt处理捕获屏幕。 – TheDarkKnight
的确如此,我会用完全不同的东西。只有在屏幕上出现运动和像素变化时,我才会发送......这会更好,更高效。 – DevAndroid