[MFC/bitmap파일 출력하기]
[MFC/bitmap파일 출력하기]
// 이 함수는 Dlg 에서 버튼을 클릭하면 bitmap 출력하는 함수이다.
void CMFC_LoadImageDlg::OnClickedOutputBmp()
{
// 그래픽을 출력하기 위해서 Device Context ( 출력담당 집합체 ) 이하 DC 가 꼭 필요하다.
// API 에서는 GetDC() , ReleaseDC() 함수를 통해서 받을수 있다.
// MFC 에서는 이 함수를 포함하는 CClientDC 클래스를 제공해준다.
// API의 WM_PAINT에 대응하는 함수로
// MFC 에서는 BeginPaint(), EndPaint() 함수가 존재하는데, 이 함수를 포함하는
// CPaintDC 클래스도 제공된다.
// 1. MFC 에서 Bitmap 출력을 하기위해서
// 1-1 Bitmap 이 출력될 윈도우화면의 DC 를 가져온다.
// 1-2 메모리상에 그려줄 DC 를 가져온다.
CClientDC WinDC(this);
CDC MemDC;
// 2. 윈도우화면의 DC 와 메모리상의 DC를 호환시켜준다.
MemDC.CreateCompatibleDC(&WinDC);
// 3. Bitmap 을 가져온다. ( 후에 그림그리기위한 정보도 가져온다. )
CBitmap bitmap;
BITMAP bitmapinfo;
bitmap.m_hObject = LoadImage(0, L"D:\\pic.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
bitmap.GetBitmap(&bitmapinfo);
// 4. Bitmap 정보를 읽어왔으므로 DC 에다가 Bitmap 정보를 맞춰준다.(선택)
// 4-1 그리고 이전 정보로 반환해줘야하기 때문에
// SelectObject 함수의 반환값은 기억해 두었다가, 작업이 끝난 후 복원을 시킨다.
CBitmap *pOldBitmap = (CBitmap *)MemDC.SelectObject(&bitmap);
// 5. Bitmap 을 출력한다.
WinDC.BitBlt(100, 100, bitmapinfo.bmWidth, bitmapinfo.bmHeight, &MemDC, 0, 0, SRCCOPY);
// int x, int y 는 논리적 좌표값
// int nWidth, int nHeight 는 bitmap의 크기
// CDC *pSrcDC Bitmap 을 저장하고 있는 메모리DC의 시작점, 즉 bitmap 데이터
// int xSrc, int ySrc 복사될 bitmap의 좌측상단좌표, 이 값들이 0 일 경우 전체 bitmap 이 복사된다.
// wROP:ROP코드, 즉 브러쉬와 복사원, 복사처의 비트맵 색상이 논리 연산될 방법을 지정한다.
// SRCCOPY는 흔히 사용하는 코드이다. 기존값을 무시하고 다시 그린다는 뜻이다.
// 6. 이전 DC 로 복원한다.
MemDC.SelectObject(pOldBitmap);
}