4.2.3 BMP 파일 입출력(불러오기 및 저장하기)
IppDib 클래스는 파일로부터 비트맵을 불러오거나 자기 자신의 비트맵을 파일로 저장하는 기능을 지원한다. 일단 public 접근 지시자로 선언된 파일 입출력 멤버 함수는 다음과 같다.
• BOOL Load(const char* filename); • BOOL Save(const char* filename);
Load 멤버 함수는 파일로부터 IppDib 객체를 생성한다. 이 함수의 인자 filename은 불러올 파일의 전체 경로 이름이다. 이 함수에서는 filename의 확장자를 검사하여 만약 확장자가 ‘bmp’이면 LoadBMP 함수를 호출한다. 실제 구현은 아래와 같이 되어 있다.
const char* ext = strrchr(filename, '.'); if (!_strcmpi(ext, ".bmp")) return LoadBMP(filename);
여기서 strrchr 함수는 문자열 중 특정 문자가 있는 마지막 위치의 포인터를 반환하는 함수이고, _strcmpi는 두 개의 문자열을 대소문자 구분 없이 비교하는 함수이다. 이 두 함수를 이용하여 파일 확장자가 bmp인 파일을 가려낼 수 있다. Save 함수도 마찬가지 형태로 동작하며, 내부적으로 SaveBMP 함수를 호출한다.
LoadBMP와 SaveBMP 멤버 함수는 private 접근 지시자로 선언되어 있어서 IppDib 클래스 외부에서는 직접 호출이 불가능하다. LoadBMP와 SaveBMP 함수의 원형은 아래와 같다.
• BOOL LoadBMP(const char* filename); • BOOL SaveBMP(const char* filename);
참고로 Load와 Save 함수에서 확장자 검사를 추가하여 JPG 또는 PNG 같은 다른 영상 파일 포맷을 지원할 수도 있다. 예를 들어 확장자 jpg를 검사하여 LoadJPG와 SaveJPG 함수를 추가할 수 있다. 이 책에서는 기본적으로 BMP 파일 입출력만 이용하여 영상 처리 이론을 설명할 것이며, 다만 JPG 파일 입출력에 관심 있는 독자를 위하여 부록 A에서 LoadJPG와 SaveJPG 함수를 만들어 추가하는 방법에 대해 설명할 것이다.