본문 바로가기
::public/윈도우즈 응용 프로그래밍

Bitmap 복사

by 해맑은욱 2019. 9. 24.

;화면에 출력된 그림을 복사하려면 출력된 그림은 DC의 Bitmap 객체에 보관되어 있기 때문에

 해당 Bitmap 객체에 저장된 '비트 패턴'을 GetBitmapBits 함수로 복사해서 사용하면 됨.

// DC에서 비트맵 객체 얻기.
HBITMAP h_bitmap = (HBITMAP)GetCurrentObject(h_dc, OBJ_BITMAP);
// 비트맵 객체에 저장된 비트 패턴 복사하기.
BITMAP bmp_info; // 비트맵의 정보를 담을 구조체.
GetObject(h_bitmap, sizeof(BITMAP), &bmp_info);
// 비트 패턴의 크기를 구하기..bmBitsPixel 의 비트 수에 따라 변환 값이 달라짐. 
int pattern_size = bmp_info.bmWidth * bmp_info.bmHeight * bmp_info.bmBitsPixel / 8
// 비트 패턴을 저장할 메모리 할당.
char* p_data = new char[pattern_size];
// 비트맵 객체에서 비트 패턴을 복사.
GetBitmapBits(h_bitmap, pattern_size, p_data);
//
// p_data에 들어있는 비트 패턴 사용.
//
// 사용했던 메모리 해제.
delete[] p_data;
// 생성한 비트맵 제거.
DeleteObject(h_bitmap);
// 사용했던 DC 반환.
::ReleaseDC(m_hWnd, h_dc);
cs

*BitBlt 함수

;DC를 사용하여 비트맵의 그림을 복사하는 함수.

 DC와 GDI 함수를 사용하여 간접적으로 비트맵에 그림을 그리는 방식을 사용.

// wingdi.h
BOOL  WINAPI BitBlt(
   _In_ HDC hdc,         // 사본 DC
    _In_ int x,           // 사본에 원본 그림이 복사될 시작할 x 좌표
    _In_ int y,           // 사본에 원본 그림이 복사될 시작할 y 좌표
    _In_ int cx,         // 사본에 원본 그림이 복사될 폭 width
    _In_ int cy,         // 사본에 원본 그림이 복사될 높이 height
   _In_opt_ HDC hdcSrc, // 원본 DC 
    _In_ int x1,         // 원본 그림에서 복사를 시작할 x 좌표
    _In_ int y1,         // 원본 그림에서 복사를 시작할 y 좌표
    _In_ DWORD rop        // 그림을 복사하는 방법 설정..SRCCOPY, SRCINVERT 등
);
 
// BitBlt 함수 사용
HDC h_screen_dc = ::GetDC(NULL);    // 모니터 전체 화면용 DC
HDC h_dc = ::GetDC(hWnd);           // 현재 윈도우용 DC
    
BitBlt(h_dc, 1010500300, h_screen_dc, 00, SRCCOPY);
::ReleaseDC(hWnd, h_dc);            // 사용하던 DC 해제
::ReleaseDC(NULL, h_screen_dc);     // 사용하던 DC 해제
cs

 

'::public > 윈도우즈 응용 프로그래밍' 카테고리의 다른 글

오목 만들기(결과로직 없음)  (0) 2019.09.24
MessageBox  (0) 2019.09.24
WinProc(윈드 프록)  (0) 2019.09.23
윈도우 좌표 구성  (0) 2019.09.23
GDI(Graphics Device Interface)  (0) 2019.09.23