Bonjour,
Je vous expose mon problème :
- J'utilise la fonction glReadPixels sur une fenêtre invisible. Cela me retourne bien les données...mais problème connu...cette fonction est bien trop lente.
- J'essaie donc de récupérer les données de la fenêtre d'une manière plus rapide. J'ai besoin d'avoir la valeur RGBA de chaque pixel de la fenêtre pour faire des traitements dessus par la suite.
- J'ai déjà tenté de créer une texture OPENGL et de récupérer les données avec les fonctions glCopyTexImage2D suivi de glGetTexImage mais les performances ne sont pas meilleures que glReadPixels!
- Je me suis donc tourné vers l'API windows et getDIBits. getDIBits n'est pas censé me retourner les valeurs de ALPHA mais un getDIBits + un glReadPixels de la valeur ALPHA reste plus rapide qu'un glReadPixels sur les données RGBA.
J'ai donc tenté le code suivant que j'ai trouvé en fouillant la toile :
Code :
HDC hDCMem = CreateCompatibleDC(s->native.window.hDC);
HBITMAP hBmp = NULL;
HGDIOBJ hOld;
HDC hDC;
LRESULT res;
RECT rect;
int temp,i,j;
unsigned long * temp_pix = pixels;
BITMAPINFO bitmap_info;
bitmap_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmap_info.bmiHeader.biWidth = width;
bitmap_info.bmiHeader.biHeight = -(signed)height;
bitmap_info.bmiHeader.biPlanes = 1;
bitmap_info.bmiHeader.biBitCount = 32;
bitmap_info.bmiHeader.biCompression = BI_BITFIELDS;
bitmap_info.bmiHeader.biXPelsPerMeter = 0;
bitmap_info.bmiHeader.biYPelsPerMeter = 0;
bitmap_info.bmiHeader.biClrUsed = 0;
bitmap_info.bmiHeader.biClrImportant = 0;
GetWindowRect(s->native.window.hWND, & rect);
hBmp = CreateCompatibleBitmap(hDCMem,width,height);
hOld = SelectObject(hDCMem, hBmp);
GetDIBits(hDCMem,hBmp,0,height,NULL,&bitmap_info,DIB_RGB_COLORS);
res = SendMessage(s->native.window.hWND, WM_PRINT, (WPARAM) hDCMem, PRF_CHILDREN | PRF_CLIENT);
res = GetDIBits(hDCMem,hBmp,0,height,pixels,&bitmap_info,DIB_RGB_COLORS);
SelectObject(hDCMem, hOld);
DeleteObject(hDCMem);
Mais je n'obtiens aucune donnée...
Quelqu'un aurait-il une petite idée de comment récupérer les données d'une fenêtre cachée?
Merci par avance.