9.2.7 크기 변환 메뉴 만들기
ImageTool 프로그램에 크기 변환을 위한 메뉴 항목과 메뉴 이벤트 처리 함수를 추가해보자. Visual Studio 리소스 뷰에서 IDR_ImageToolTYPE 메뉴 항목을 더블 클릭하여 메뉴 편집 창이 나타나게 한 후, [이미지] 팝업 메뉴 맨 아래에 [크기 변환] 메뉴 항목을 추가하자. [크기 변환] 메뉴 항목의 속성은 표 9-9를 참고하라.
ID |
Caption |
ID_IMAGE_RESIZE |
크기 변환(&S)... |
메뉴 항목을 추가하였으면 이제 이 메뉴에 대한 메뉴 이벤트 처리 함수를 추가하자. [크기 변환] 메뉴 항목에 대한 이벤트 처리기 마법사에 입력할 정보는 표 9-10을 참고하라. OnImageResize 함수에 추가할 소스 코드는 소스 9-8에 나타내었다.
명령 이름(ID) |
처리 클래스 |
메시지 형식 |
처리기 이름 |
ID_IMAGE_RESIZE |
CImageToolDoc |
COMMAND |
OnImageResize |
#include "ResizeDlg.h" … void CImageToolDoc::OnImageResize() { CResizeDlg dlg; dlg.m_nOldWidth = m_Dib.GetWidth(); dlg.m_nOldHeight = m_Dib.GetHeight(); if (dlg.DoModal() == IDOK) { CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc) IppByteImage imgDst; switch (dlg.m_nInterpolation) { case 0: IppResizeNearest(imgSrc, imgDst, dlg.m_nNewWidth, dlg.m_nNewHeight); break; case 1: IppResizeBilinear(imgSrc, imgDst, dlg.m_nNewWidth, dlg.m_nNewHeight); break; case 2: IppResizeCubic(imgSrc, imgDst, dlg.m_nNewWidth, dlg.m_nNewHeight); break; } CONVERT_IMAGE_TO_DIB(imgDst, dib) TCHAR* interpolation[] = { _T("최근방 이웃 보간법"), _T("양선형 보간법"), _T("3차 회선 보간법") }; AfxPrintInfo(_T("[크기 변환] 입력 영상: %s, , 새 가로 크기: %d, 새 세로 크기: %d, 보간법: %s"), GetTitle(), dlg.m_nNewWidth, dlg.m_nNewHeight, interpolation[dlg.m_nInterpolation]); AfxNewBitmap(dib); } }
OnImageResize 함수의 시작 부분에서 CResizeDlg 클래스의 인스턴스를 하나 선언하고, 그 아래에서 CResizeDlg 클래스의 멤버 변수인 m_nOldWidth와 m_nOldHeight 값을 설정한 것에 주목하기 바란다. 이 두 멤버 변수의 값은 대화 상자를 화면에 나타나게 하는 DoModal 함수를 호출하기 전에 반드시 설정해주어야 한다.