3.2.1 BMP 파일의 전체 구조
BMP 파일이란 확장자가 “BMP”인 파일을 말하며, 이는 Windows 운영체제에서 DIB를 저장하기 위해 사용되는 파일 형식이다. BMP 파일은 다른 영상 파일 형식과 달리 압축을 하지 않고, DIB 구조를 그대로 파일로 저장한 형태이다. BMP 파일은 BMP 파일 자체에 대한 정보와 비트맵 영상에 대한 정보, 그리고 각 픽셀의 색상 정보를 나타내는 부분으로 구성되어 있다. 그림 3-1은 BMP 파일의 전체 구조이다.
비트맵 파일 헤더는 BMP 파일 자체에 대한 정보를 담고 있는 영역이고, 비트맵 정보 헤더는 비트맵 영상의 크기, 색상 수 등에 대한 정보를 담고 있는 영역이다. 색상 테이블은 비트맵 영상의 색상 정보를 담고 있는 부분으로 팔레트palette라고도 부른다. 비트맵의 색상 수에 따라 색상 테이블 영역이 존재하지 않을 수도 있다. 마지막으로 픽셀 데이터는 각 픽셀의 색상 정보를 표현하는 공간이다. 각 픽셀마다 3바이트를 사용하여 파란색Blue, 녹색Green, 빨간색Red 색상 정보를 표현하기도 하고, 또는 색상 테이블이 존재하면 1바이트를 사용하여 색상 테이블 배열의 인덱스index를 가리키기도 한다.
그림 3-1에서 영어 대문자로 쓰여 있는 BITMAPFILEHEADER, BITMAPINFOHEADER, RGBQUAD는 Windows 운영체제에 정의되어 있는 구조체의 이름이다. 이 구조체의 내용을 정확하게 이해하는 것이 BMP 파일을 이해하는 방법이라고 할 수 있다. BITMAPINFOHEADER 구조체와 색상 테이블, 픽셀 데이터 부분을 합쳐 packed-DIB 포맷이라고도 부르는데, 이 책에서는 단순히 DIB 구조라고 부르도록 하겠다. Windows에서 비트맵을 화면에 출력하기 위해서는 이 DIB 구조 부분만 있으면 된다. 보통의 DIB 출력 함수들은 DIB 구조의 시작 위치, 즉 BITMAPINFOHEADER 구조체의 시작 주소와 픽셀 데이터의 시작 주소를 인자로 넘겨받아 화면 출력을 수행한다.