Во-первых, я извиняюсь перед вами, мой английский очень короткий. но я стараюсь изо всех сил.
среда:
OpenGL
Win32 API
c ++
Визуальная студия 2010
мой проект:
используя приложение, которое копирует iPhone, созданный Adobe AIR. (это не моя программа)
я хочу текстурировать скриншот этой программы в мой opengl. Многие приложения Win32 могут получить скриншот в реальном времени с помощью следующего кода:
HWND hSrc = ::FindWindow(NULL, "iBBDemo3");
HDC hSrcDC = GetDC(hSrc);
HDC hdc = GetDC(NULL);
RECT targetRect;
GetClientRect(hSrc,&targetRect);
int width = targetRect.right;
int height = targetRect.bottom;
HDC memdc = CreateCompatibleDC(hdc);
int* t;
BITMAPINFO bmii;
ZeroMemory(&bmii,sizeof(bmii));
bmii.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmii.bmiHeader.biBitCount = 32;
bmii.bmiHeader.biWidth = width;
bmii.bmiHeader.biHeight = height;
bmii.bmiHeader.biPlanes = 1;
HBITMAP hBitMapUsing = CreateDIBSection(hdc,&bmii,DIB_RGB_COLORS,(void**)&t,NULL,0);
HDC dcTarget = CreateCompatibleDC(hdc);
SelectObject(dcTarget,hBitMapUsing);
RECT rt;
GetClientRect(NULL,&rt);
::PrintWindow(hSrc, dcTarget, 0);
return t; //t is byte array of texture that i want
этот код работает нормально. и в режиме реального времени обновляется на текстуру.
но приложение Adobe Air не может работать с этим кодом.
FindWindow работает нормально, getdc работает нормально, но байтовый массив снимков экрана чёрного цвета.
кто знает, почему возникает эта проблема или другой способ получить массив байтов скриншота приложения Adobe AIR? помоги мне!