안녕하세요 오늘은 CImage를 이용하여 BITMAP 이미지를 대화상자에 표시하도록 해보겠습니다.
비트맵 이미지를 표시하는 방법은
- 이미지 파일을 읽어서 표시 하는 방법과
- 비트맵을 리소스에 추가하여 리소스를 읽어 표시하는 방법
- 두가지 방법이 있습니다
위 두가지 방법 모두 알아보겠습니다.
그전에 아래와 같이 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() );
}
실행 시켜 확인해 봅니다.