더북(TheBook)

9.3.5 회전 변환 메뉴 만들기

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

표 9-15 [회전 변환] 메뉴 항목 속성

ID

Caption

ID_IMAGE_ROTATE

회전 변환(&R)...

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

표 9-16 [회전 변환] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_IMAGE_ROTATE

CImageToolDoc

COMMAND

OnImageRotate

소스 9-12 [회전 변환] 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
#include "RotateDlg.h"void CImageToolDoc::OnImageRotate()
{
    CRotateDlg dlg;
    if (dlg.DoModal() == IDOK)
    {
        CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc)
        IppByteImage imgDst;
        switch (dlg.m_nRotate)
        {
        case 0: IppRotate90(imgSrc, imgDst); break;
        case 1: IppRotate180(imgSrc, imgDst); break;
        case 2: IppRotate270(imgSrc, imgDst); break;
        case 3: IppRotate(imgSrc, imgDst, (double)dlg.m_fAngle); break;
        }

        CONVERT_IMAGE_TO_DIB(imgDst, dib)

        TCHAR* rotate[] = { _T("90도"), _T("180도"), _T("270도") };
        if (dlg.m_nRotate != 3)
            AfxPrintInfo(_T("[회전 변환] 입력 영상: %s, 회전 각도: %s"), GetTitle(), rotate[dlg.m_nRotate]);
        else
            AfxPrintInfo(_T("[회전 변환] 입력 영상: %s, 회전 각도: %4.2f도"), GetTitle(), dlg.m_fAngle);
        AfxNewBitmap(dib);
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.