더북(TheBook)

6.1.4 영상 반전 메뉴 만들기

ImageTool 프로그램에 반전 메뉴를 추가하고 실제 IppInverse 함수를 사용하는 메뉴 이벤트 처리기를 추가해보자. 리소스 뷰에서 Menu 항목 아래에 있는 IDR_ImageToolTYPE 항목을 더블 클릭하여 열어보자. 그리고 그림 6-5처럼 메뉴 항목 중에서 [도움말] 항목 오른쪽 빈 칸에 ‘이미지(&I)’라고 입력하고 Enter 키를 입력하자. 영상 반전과 관련된 메뉴 항목은 이 [이미지] 메뉴 아래에 붙일 것이다.

그림 6-5 이미지 메뉴 항목 추가

[이미지] 메뉴를 추가하였지만, 영상 처리와 관련된 실제적인 기능이 [도움말] 메뉴 뒤에 있는 것은 미관상 좋지 않다. 그러므로 마우스를 이용하여 [이미지] 메뉴를 [창] 메뉴 앞쪽으로 드래그하여 옮기자. 그리고 그림 6-6과 같이 [반전] 메뉴 항목을 새로 추가하자. [반전] 메뉴 항목의 속성은 표 6-1에 나타내었다. 그림 6-6과 같이 [반전] 메뉴 항목을 선택한 상태에서 속성 창에 아이디와 캡션을 정확하게 입력하도록 하자. 메뉴 항목의 캡션에서 ‘&I’ 기호는 메뉴 항목이 펼쳐졌을 때 키보드에서 I 키를 눌러 해당 메뉴를 선택할 수 있음을 의미한다.

그림 6-6 [반전] 메뉴 항목 추가
표 6-1 [반전] 메뉴 항목 속성

ID

Caption

ID_IMAGE_INVERSE

반전(&I)

[반전] 메뉴 항목을 추가하였으면 이제 이 메뉴에 대한 메뉴 이벤트 처리 함수를 추가하자. [반전] 메뉴 항목에 대한 이벤트 처리기 마법사에 입력할 정보는 표 6-2를 참고하라. 새로 추가된 OnImageInverse 함수에 입력할 소스 코드는 소스 6-3에 나타내었다.

표 6-2 [반전] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_IMAGE_INVERSE

CImageToolDoc

COMMAND

OnImageInverse

소스 6-3 반전 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
#include "IppImage\IppImage.h"
#include "IppImage\IppConvert.h"
#include "IppImage\IppEnhance.h"void CImageToolDoc::OnImageInverse()
{
    IppByteImage img;
    IppDibToImage(m_Dib, img);
    IppInverse(img);

    IppDib dib;
    IppImageToDib(img, dib);

    AfxPrintInfo(_T("[반전] 입력 영상: %s"), GetTitle());
    AfxNewBitmap(dib);
}

OnImageInverse 함수에 추가한 코드는 생각보다 조금 많지만 그 내용은 매우 직관적이다. 먼저 IppDibToImage 함수를 이용하여 IppDib 객체를 IppByteImage 객체로 변환하였다. 그리고 앞에서 구현한 영상 반전 함수인 IppInverse 함수를 호출하였다. 반전된 결과 영상은 img에 그대로 저장되고, 이를 다시 IppImageToDib 함수를 사용하여 IppDib 타입으로 변환하였다. 마지막으로 출력창에 반전 기능이 수행되었음을 표시하고, 반전 처리된 비트맵은 새 창으로 띄우도록 하였다. OnImageInverse 함수에서 IppByteImage 클래스와 IppDibToImage, IppInverse 등의 함수를 사용했기 때문에 ImageToolDoc.cpp 파일 맨 위에 세 개의 헤더 파일(IppImage.h, IppConvert.h, IppEnhance.h)을 추가로 #include 해주었다.

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