더북(TheBook)

6.2.5 밝기/명암비 조절 메뉴 만들기

밝기 조절과 명암비 조절을 위한 대화 상자 작성이 완료되었으면 이제 이 대화 상자를 화면에 나타내기 위한 메뉴 및 메뉴 이벤트 처리기를 만들어보자. 그리고 대화 상자에서 입력된 값을 이용하여 밝기와 명암비 조절을 위한 함수 호출까지 수행하도록 하자.

Visual Studio의 리소스 뷰에서 IDR_ImageToolTYPE 메뉴 항목을 더블클릭하여 메뉴 편집을 시작해보자. 6.1절에서 추가한 [반전] 메뉴 아래에 그림 6-22와 같이 밝기 및 명암비 조절을 위한 메뉴 항목을 추가하자. 메뉴 항목에 대한 속성은 표 6-6에 나타내었다. 그림과 표를 참고하여 정확하게 입력해보자.

그림 6-22 [밝기/명암비 조절] 메뉴 항목 추가
표 6-6 [밝기/명암비 조절] 메뉴 항목 속성

ID

Caption

ID_BRIGHTNESS_CONTRAST

밝기/명암비 조절(&B)...

메뉴 항목을 추가하였으면 이 메뉴 항목을 처리하는 메뉴 이벤트 처리기를 추가하자. 표 6-7을 참고하여 CImageToolDoc 클래스에 OnBrightnessContrast 함수를 추가하자. OnBrightnessContrast 함수에 추가할 소스 코드는 소스 6-10에 나타내었다.

표 6-7 [밝기/명암비 조절] 메뉴 이벤트 처리기 정보

명령 이름(ID)

처리 클래스

메시지 형식

처리기 이름

ID_BRIGHTNESS_CONTRAST

CImageToolDoc

COMMAND

OnBrightnessContrast

소스 6-10 [밝기/명암비 조절] 메뉴 이벤트 처리 함수(ImageToolDoc.cpp)
#include "BrightnessContrastDlg.h"void CImageToolDoc::OnBrightnessContrast()
{
    CBrightnessContrastDlg dlg;
    if (dlg.DoModal() == IDOK)
    {
        CONVERT_DIB_TO_BYTEIMAGE(m_Dib, img)
        IppBrightness(img, dlg.m_nBrightness);
        IppContrast(img, dlg.m_nContrast);
        CONVERT_IMAGE_TO_DIB(img, dib)

        AfxPrintInfo(_T("[밝기/명암비 조절] 입력 영상: %s, 밝기: %d, 명암비: %d%%"),
            GetTitle(), dlg.m_nBrightness, dlg.m_nContrast);
        AfxNewBitmap(dib);
    }
}

[밝기/명암비 조절] 메뉴에 대한 이벤트 처리 함수인 OnBrightnessContrast 함수에서는 밝기/명암비 조절 대화 상자를 DoModal 함수를 이용하여 화면에 보여준다. 그리고 사용자가 [확인] 버튼을 클릭하였을 경우에 한하여 밝기와 명암비 조절 함수들을 호출한다. 사용자가 선택한 밝기 및 명암비 값은 AfxPrintInfo 함수를 이용하여 출력창에 표시하고, 밝기 및 명암비 조절된 결과 영상은 AfxNewBitmap 함수를 이용하여 새 창으로 표시하도록 하였다.

그림 6-23은 ImageTool 프로그램을 실행하여 밝기 및 명암비를 조절한 결과를 보여준다. 그림에서 가장 왼쪽의 차일드 윈도우 창의 영상이 입력 영상 lenna.bmp 파일이다. 가운데 있는 영상은 lenna.bmp 영상의 밝기 값을 64만큼 증가시킨 영상이다. 전체적으로 밝아진 느낌을 주고 있다. 오른쪽 영상은 명암비를 40% 증가시킨 영상이다. 밝고 어두운 부분의 대비가 커져서 더욱 선명한 듯한 느낌을 주고 있음을 확인할 수 있다.

그림 6-23 ImageTool 프로그램에서 밝기/명암비 조절 실행 결과
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.