как я могу получить байтовый массив из HBITMAP - PullRequest
0 голосов
/ 16 февраля 2012

моя среда:win32Visual C ++DirectX

Мне нужно сопоставить лицо другого приложения с текстурой моего приложения.например, мой экран Internet Explorer отображается на моей текстуре DirectX Cube и обновляется в реальном времени.мой метод следующий:

//in DirectX Rendering Loop...

HWND hSrc = FindWindow(NULL, _T("application's classname"));
HDC hdc = GetDC(hSrc);

RECT targetRect;
GetClientRect(hSrc, &targetRect);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc,targetRect.right,targetRect.bottom);
//now, target application's window is 'hBitmap'

LPDIRECT3DTEXTURE9 ptxt = NULL;    //my destination texture
if( SUCCEEDED(D3DXCreateTexture(gpDevice,targetRect.right, targetRect.bottom, 
        0, 0, D3DFMT_A8B8G8R8, D3DPOOL_MANAGED,&ptxt)))
        {
            D3DLOCKED_RECT lr;
            HRESULT hr = ptxt->LockRect(0,&lr,NULL,D3DLOCK_DISCARD);

             //TODO : memcpy(lr.pBits , 'Start pointer of Bit-Array' , targetRect.right*targetRect.bottom*4); //mydesktop's color is 32bit truecolor (= *4)

            ptxt->UnlockRect(0);
        }

Вопрос:Как я могу получить байтовый массив из формата HBITMAP ???есть какой-нибудь метод в win32api, как этот?GetByteArray (HBITMAP, void **)или можно сделать это с помощью другого метода?

1 Ответ

1 голос
/ 16 февраля 2012

CreateCompatibleBitmap создает DDB, где у вас нет доступа к битам.Попробуйте вместо этого использовать CreateDIBSection .

Также обратите внимание, что, как написано, вы на самом деле ничего не добавили в растровое изображение.

...