9.2.7 크기 변환 메뉴 만들기

    ImageTool 프로그램에 크기 변환을 위한 메뉴 항목과 메뉴 이벤트 처리 함수를 추가해보자. Visual Studio 리소스 뷰에서 IDR_ImageToolTYPE 메뉴 항목을 더블 클릭하여 메뉴 편집 창이 나타나게 한 후, [이미지] 팝업 메뉴 맨 아래에 [크기 변환] 메뉴 항목을 추가하자. [크기 변환] 메뉴 항목의 속성은 표 9-9를 참고하라.

    표 9-9 [크기 변환] 메뉴 항목 속성

    ID

    Caption

    ID_IMAGE_RESIZE

    크기 변환(&S)...

    메뉴 항목을 추가하였으면 이제 이 메뉴에 대한 메뉴 이벤트 처리 함수를 추가하자. [크기 변환] 메뉴 항목에 대한 이벤트 처리기 마법사에 입력할 정보는 표 9-10을 참고하라. OnImageResize 함수에 추가할 소스 코드는 소스 9-8에 나타내었다.

    표 9-10 [크기 변환] 메뉴 이벤트 처리기 정보

    명령 이름(ID)

    처리 클래스

    메시지 형식

    처리기 이름

    ID_IMAGE_RESIZE

    CImageToolDoc

    COMMAND

    OnImageResize

    소스 9-8 [크기 변환] 메뉴 이벤트 처리 함수 구현(ImageToolDoc.cpp)
    #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_nOldWidthm_nOldHeight 값을 설정한 것에 주목하기 바란다. 이 두 멤버 변수의 값은 대화 상자를 화면에 나타나게 하는 DoModal 함수를 호출하기 전에 반드시 설정해주어야 한다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.