Witam serdecznie, próbuję napisać aplikację robiącą zrzut ekranu(pulpitu) do bitmapy a następnie wyciągającą z niej informacje w celu dalszej manipulacji/operacji.
int ScreenX = GetSystemMetrics(SM_CXSCREEN);
int ScreenY = GetSystemMetrics(SM_CYSCREEN);
BYTE* ScreenData = new BYTE[3*ScreenX*ScreenY];
HDC hdc = GetDC(HWND_DESKTOP),
hdcMem = CreateCompatibleDC (hdc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc, ScreenX, ScreenY);
BITMAPINFO bmi ;
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24;
bmi.bmiHeader.biWidth = ScreenX;
bmi.bmiHeader.biHeight = -ScreenY;
bmi.bmiHeader.biCompression = BI_RGB;
SelectObject(hdcMem, hBitmap);
BitBlt(hdcMem, 0, 0, ScreenX, ScreenY, hdc, 0, 0, SRCCOPY);
GetDIBits(hdc, hBitmap, 0, ScreenY, ScreenData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
DeleteObject(hBitmap);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdc);
int startX = 1351;
int startY = 151;
BYTE r = ScreenData[3*((startY*ScreenX)+startX)+2];
BYTE g = ScreenData[3*((startY*ScreenX)+startX)+1];
BYTE b = ScreenData[3*((startY*ScreenX)+startX)];
Label4->Caption = r;
Label7->Caption = g;
Label8->Caption = b;
delete [] ScreenData;
Powyższy kod mam wrzucony do timera ustawionego na 500 ms. Działa on częściowo, tzn na zmianę: Podczas pierwszego wywołania działa, podczas drugiego nie, potem znowu działa i tak w kółko. W efekcie co pół sekundy w Labelach mam widoczne wartości kolorów, przez następne pół zero i tak dalej. Co jest przyczyną problemu ?