Как получить Pixel data \ Pixel buffer из окна и извлечь RGB?

Я рисую текст (textOut) и прямоугольники на моем окне …
и я хотел бы получить из него буфер RGB …
Как мне это сделать?

1

Решение

Есть 2 варианта:

Во-первых, вы можете использовать GetPixel (). Я использовал это много. Работает нормально:

COLORREF GetPixel(
HDC hdc,
int nXPos,
int nYPos
);

В наши дни процессоры, улавливающие даже прямоугольник с помощью этой функции, могут работать в определенных случаях.

Во-вторых, вы можете скопировать содержимое экрана в растровое изображение. После этого вы можете поместить его в буфер обмена, обработать его кодом и т. Д. Основная функция:

BOOL BitBlt(
_In_  HDC hdcDest,
_In_  int nXDest,
_In_  int nYDest,
_In_  int nWidth,
_In_  int nHeight,
_In_  HDC hdcSrc,
_In_  int nXSrc,
_In_  int nYSrc,
_In_  DWORD dwRop
);

Я могу опубликовать более подробный фрагмент, если это необходимо.

// Pick up the DC.
HDC hDC = ::GetDC(m_control);

// Pick up the second DC.
HDC hDCMem = ::CreateCompatibleDC(hDC);

// Create the in memory bitmap.
HBITMAP hBitmap = ::CreateCompatibleBitmap(hDC, bmp_size_x, bmp_size_y);

// Put bitmat into the memory DC. This will make it functional.
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hDCMem, hBitmap);

// Clear the background.
HBRUSH hBkgr = ::CreateSolidBrush(props.bkgr_brush);
RECT bitmap_rect = { 0, 0, bmp_size_x, bmp_size_y };
::FillRect(hDCMem, &bitmap_rect, hBkgr);
::DeleteObject(hBkgr);

// Do the job.
::BitBlt(hDCMem, margins_rect.left, margins_rect.top,
size_to_copy_x, size_to_copy_y, hDC,
screen_from_x, screen_from_y, SRCCOPY);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]