私は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