바람이 머문 언덕

윈도우 캡처 함수 본문

컴퓨터 IT/C++ 언어

윈도우 캡처 함수

알 수 없는 사용자 2009. 12. 13. 15:38
반응형

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;
}