;화면에 출력된 그림을 복사하려면 출력된 그림은 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, 10, 10, 500, 300, h_screen_dc, 0, 0, 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 |