MFC

[MFC/bitmap파일 출력하기]

성엽이 2014. 1. 21. 14:14

[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);

}