바람이 머문 언덕
윈도우 캡처 함수 본문
MFC에서 만든 특정 윈도우의 화면을 캡처하기 위해서 만든 함수입니다.
캡처 할 범위를 전달 해주면 지정 윈도우에서 그 범위의 화면을 캡처해서 char형 포인트로 반환하는 함수 입니다.
char* Capture(HWND hwnd, int x, int y, int width, int height) // 윈도우 화면 캡처
{
CDC dc, SDC;
char* buf = new char(width * height * 4); // 32bit
CBitmap bmp, * pbmp;
//ScreenDC.CreateDC(L"DISPLAY", NULL, NULL, NULL);
SDC.m_hDC=::GetDC(hwnd);
dc.CreateCompatibleDC(&SDC); // DC에 관련하는 디바이스와 호환성 있는 메모리 디바이스 컨텍스트 생성
bmp.CreateCompatibleBitmap(&SDC, width, height); // DC에 호환하는 비트맵을 생성하여 반환한다
pbmp = dc.SelectObject(&bmp);
dc.BitBlt(0, 0, width, height, &SDC, x, y, SRCCOPY);
bmp.GetBitmapBits(width * height * 4, buf); // 버퍼로 복사시켜줍니다
dc.SelectObject(pbmp);
bmp.DeleteObject();
dc.DeleteDC();
SDC.DeleteDC();
return buf;
}
bool CkeckPoint( void ) // 일정 범위를 캡처 후 특정 위치의 좌표의 색을 비교 한다.
{
char buf;
COLORREF rgb = 0;
int i, x=147, y=692, width=200, height=20, ipoint = 40;
buf = Capture(::FindWindow(NULL, L"TestWindow"), x, y, width, height);
i = (((width * ipoint /100) * 4) + height * width * 2); // 해당 좌표의 RGB 시작점을 구한다.
rgb = RGB(buf[i + 2], buf[i + 1], buf[i]);
return ( rgb == 2039583 ) ? true : false;
delete buf;
}