J'essaie de créer un code simple en C++ pour faire une capture d'écran et obtenir le buffer des pixels (RGB). J'utilise DirectX mais j'ai une erreur de segmentation. J'ai suivi un code que j'ai trouvé mais rien.Screenshot Desktop DirectX C++/QT
voici mon code:
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();
}
quelqu'un peut me aider s'il vous plaît?
Nous vous remercions de votre réponse. Je sais de cette façon dans QT, le problème est que je veux appeler cette fonction beaucoup et envoyer des images via des sockets pour simuler une mise en miroir dans un autre appareil. Donc, je cherche l'efficacité ... Je voulais utiliser DirectX – DevAndroid
@DevAndroid, vous trouverez probablement que l'envoi des images et/ou de les compresser prendra beaucoup plus de temps que la capture d'écran et serait mieux regarder l'optimisation après le développement de votre solution avec la manipulation de Qt capturant l'écran. – TheDarkKnight
C'est vrai, je vais utiliser quelque chose de totalement différent. Je n'enverrai que lorsqu'il y aura un mouvement et que les pixels changeront à l'écran ... Ce serait mieux et plus efficace. – DevAndroid