더북(TheBook)

8.4.4 잡음 추가 메뉴 만들기

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

표 8-11 [잡음 추가] 메뉴 항목 속성

ID

Caption

ID_ADD_NOISE

잡음 추가(&N)...

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

표 8-12 [잡음 추가] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_ADD_NOISE

CImageToolDoc

COMMAND

OnAddNoise

소스 8-15 잡음 추가 메뉴 항목에 대한 이벤트 처리 함수(ImageToolDoc.cpp)
#include "AddNoiseDlg.h"void CImageToolDoc::OnAddNoise()
{
    CAddNoiseDlg dlg;
    if (dlg.DoModal() == IDOK)
    {
        CONVERT_DIB_TO_BYTEIMAGE(m_Dib, imgSrc)
        IppByteImage imgDst;

        if (dlg.m_nNoiseType == 0)
            IppNoiseGaussian(imgSrc, imgDst, dlg.m_nAmount);
        else
            IppNoiseSaltNPepper(imgSrc, imgDst, dlg.m_nAmount);
  
        CONVERT_IMAGE_TO_DIB(imgDst, dib)

        TCHAR* noise[] = { _T("가우시안"), _T("소금&후추") };
        AfxPrintInfo(_T("[잡음 추가] 입력 영상: %s, 잡음 종류: %s, 잡음 양: %d"),
            GetTitle(), noise[dlg.m_nNoiseType], dlg.m_nAmount);
        AfxNewBitmap(dib);
    }
}

그림 8-28은 ImageTool 프로그램에서 lenna.bmp 파일에 잡음을 추가한 결과 화면이다. ImageTool1 창의 영상은 lenna.bmp 영상에 가우시안 잡음을 5만큼 추가한 결과이며, ImageTool2 창의 영상은 소금&후추 잡음을 5만큼 추가한 결과 영상이다. 여러분들도 직접 프로그램을 실행하여 잡음의 종류와 양에 따른 변화를 관찰해보기 바란다.

그림 8-28 ImageTool 프로그램에서 잡음 추가 실행 화면
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.