저는 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();
}
누군가가 제발 도와 드릴까요 : 여기
내 코드? 당신이 QQuickWindow과 핸들을 가지고 있고, 그 창에서 볼 수 있습니다 무엇을 캡처 할 경우
답장을 보내 주셔서 감사합니다. QT에서이 방법을 알고 있습니다. 문제는이 함수를 많이 호출하고 소켓을 통해 이미지를 보내서 다른 장치의 미러링을 시뮬레이트하고 싶다는 것입니다. 그래서 효율성을 찾고 있어요 ... DirectX – DevAndroid
@DevAndroid를 사용하고 싶었습니다. 이미지를 보내거나 압축하는 것이 스크린 샷보다 훨씬 오래 걸리고 솔루션을 개발 한 후 최적화를 더 잘 볼 수 있습니다. Qt 처리로 화면 캡처. – TheDarkKnight
사실, 나는 완전히 다른 것을 사용할 것이다. 화면에 움직임이 있고 픽셀이 바뀔 때만 보내 드리겠습니다 ... 더 효율적이고 효율적입니다. – DevAndroid