5.1.3 BMP 파일 불러오기와 저장하기
BMP 파일을 불러오고, 영상 처리가 적용된 결과 영상을 다시 BMP 파일로 저장하는 기능을 구현해보자. Visual C++ 응용 프로그램 마법사가 생성해준 ImageTool.exe 프로그램에는 [파일] 메뉴 아래 이미 [열기...], [저장], [다른 이름으로 저장...] 같은 파일 입출력 관련 메뉴 항목들이 만들어져 있다. [열기...] 메뉴를 선택하면 파일 선택 대화 상자를 이용하여 원하는 파일을 선택할 수 있도록 도와주고, [다른 이름으로 저장...] 메뉴를 선택하면 마찬가지로 저장할 파일의 이름을 입력할 수 있는 파일 대화 상자가 나타난다. 그러나 [열기...] 메뉴를 이용하여 lenna.bmp 파일을 선택한다고 하더라도 ImageTool 프로그램은 lenna.bmp 파일의 내용을 화면에 보여주지는 않는다. 응용 프로그램 마법사가 기본적으로 만들어주는 코드는 사용자 인터페이스 부분만을 제공해줄 뿐이며, 선택한 파일의 데이터를 읽어서 화면에 출력해주는 코드까지는 만들어주지 않기 때문이다. 실제적인 데이터 처리 작업은 여러분이 직접 코드를 작성해야 한다.
MFC 응용 프로그램에서 [열기] 또는 [저장] 메뉴를 선택하면 내부적으로 OnOpenDocument 또는 OnSaveDocument 함수가 자동적으로 호출된다. 이 함수들은 원래 CImageToolDoc 클래스의 부모 클래스인 CDocument 클래스에 정의된 가상 함수들이다. 이 함수들을 여러분이 생성한 CImageToolDoc 클래스에서 재정의하면, 프로그램은 파일 입출력 관련 작업을 CImageToolDoc 클래스에 존재하는 OnOpenDocument 또는 OnSaveDocument 멤버 함수를 찾아 실행하게 된다.
그러면 실제로 CImageToolDoc 클래스에 OnOpenDocument 함수와 OnSaveDocument 함수를 재정의하는 작업을 시작해보자. 가상 함수 재정의도 클래스 마법사를 이용하여 쉽게 수행할 수 있다. Ctrl+Shift+X 키를 눌러서 클래스 마법사를 실행한 후, 그림 5-15와 같이 ‘클래스 이름’은 CImageToolDoc을 선택하고, 아래 탭 중에서는 ‘가상함수’ 탭을 선택하자. 그리고 그 아래 ‘가상함수’ 목록 중에서 OnOpenDocument와 OnSaveDocument 항목을 찾아 각각 마우스로 더블 클릭을 하자. 또는 각각 함수를 선택한 후, 오른쪽에 있는 [함수 추가] 버튼을 클릭해도 된다. 그러면 오른편 ‘재정의된 가상 함수’ 목록에 두 함수가 추가될 것이다. 그림 5-15와 동일하게 추가 완료되었으면 [확인] 버튼을 클릭하자.