더북(TheBook)

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 함수를 호출한다.

LoadBMPSaveBMP 멤버 함수는 private 접근 지시자로 선언되어 있어서 IppDib 클래스 외부에서는 직접 호출이 불가능하다. LoadBMPSaveBMP 함수의 원형은 아래와 같다.

BOOL LoadBMP(const char* filename);
• BOOL SaveBMP(const char* filename);

참고로 LoadSave 함수에서 확장자 검사를 추가하여 JPG 또는 PNG 같은 다른 영상 파일 포맷을 지원할 수도 있다. 예를 들어 확장자 jpg를 검사하여 LoadJPGSaveJPG 함수를 추가할 수 있다. 이 책에서는 기본적으로 BMP 파일 입출력만 이용하여 영상 처리 이론을 설명할 것이며, 다만 JPG 파일 입출력에 관심 있는 독자를 위하여 부록 A에서 LoadJPGSaveJPG 함수를 만들어 추가하는 방법에 대해 설명할 것이다.

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