[WinAPI] CImage를 이용하여 Bitmap 이미지 표시

안녕하세요 오늘은 CImage를 이용하여 BITMAP 이미지를 대화상자에 표시하도록 해보겠습니다.

비트맵 이미지를 표시하는 방법은

  1. 이미지 파일을 읽어서 표시 하는 방법과
  2. 비트맵을 리소스에 추가하여 리소스를 읽어 표시하는 방법
  3. 두가지 방법이 있습니다

위 두가지 방법 모두 알아보겠습니다.

그전에 아래와 같이 Static Control을 추가하여 ID를 IDC_STATIC_DISP로 설정하고 컨트롤 변수로 m_stDisp로 설정합니다.

CStatic m_stDisp;

저는 강아지 이미지로 해보겠습니다.

1. 이미지 파일을 읽어서 표시

확인 버튼을 더블 클릭하신 후 아래와 같이 코딩합니다.

void CImageTestDlg::OnBnClickedOk()
{
	HWND hwnd = m_stDisp.GetSafeHwnd();	// 컨트롤 핸들 얻기
	HDC hdc = ::GetDC( hwnd );	// 컨트롤 DC 얻기

	CImage imgFile;
	HRESULT hr = imgFile.Load( _T(".\\test.bmp") );	// 이미지 로드
	if ( SUCCEEDED(hr) )
	{
		CRect rect;
		::GetWindowRect( hwnd, &rect );	// 컨트롤 크기 얻기
		::SetStretchBltMode(hdc, HALFTONE);	// HALFTONE모드로 설정해서 크기 축소로 인한 이미지 깨짐 현상 최소화
		imgFile.Draw( hdc, 0, 0, rect.Width(), rect.Height(), 0, 0, imgFile.GetWidth(), imgFile.GetHeight() );
	}
}

저같은 경우 bmp 파일을 로드할때 상대 경로를 입력했지만 아래와 같이 절대 경로를 입력 하셔도 됩니다.

HRESULT hr = imgFile.Load( _T("이미지 경로\\test.bmp") );

실행 후 확인 버튼을 누르면 아래와 같이 표시됩니다.

2. 비트맵을 리소스에 추가하여 리소스를 읽어 표시

아래의 순서대로 비트맵을 리소스에 추가 하신 뒤 ID를 IDB_BITMAP_DOG로 설정해 줍니다.

위 순서대로 추가해 주신 후 확인 버튼에 있던 코드를 아래와 같이 변경해 줍니다.

void CImageTestDlg::OnBnClickedOk()
{
	HWND hwnd = m_stDisp.GetSafeHwnd();	// 컨트롤 핸들 얻기
	HDC hdc = ::GetDC( hwnd );	// 컨트롤 DC 얻기

	CImage imgFile;
	imgFile.LoadFromResource( ::AfxGetInstanceHandle(), IDB_BITMAP_DOG ); // 리소스 로드

	CRect rect;
	::GetWindowRect( hwnd, &rect );	// 컨트롤 크기 얻기
	::SetStretchBltMode(hdc, HALFTONE);	// HALFTONE모드로 설정해서 크기 축소로 인한 이미지 깨짐 현상 최소화
	imgFile.Draw( hdc, 0, 0, rect.Width(), rect.Height(), 0, 0, imgFile.GetWidth(), imgFile.GetHeight() );
}

실행 시켜 확인해 봅니다.