[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);
}
'MFC' 카테고리의 다른 글
[MFC] 모달 vs 모달리스 (0) | 2014.02.04 |
---|---|
[MFC] MFC Control (도구상자, 컨트롤) 함수 모음 정리 (0) | 2014.01.29 |
[MFC] 2014.01.24 더블콜론(Scope resolution operator), " :: " 을 쓰는 이유 (2) | 2014.01.24 |
[MFC] MFC 프린터 관련 함수 (0) | 2014.01.22 |
[MFC/스크랩] MFC 에서 DC 클래스 얻기 및 내부 구조 / CDC, CPaintDC, CClientDC, CWindowDC 사용법 (0) | 2014.01.21 |