더북(TheBook)

BMP 파일 구조 중 색상 테이블 부분은 비트맵 파일의 속성에 따라 존재하지 않을 수도 있다. 그래서 그림 3-1에서는 색상 테이블 부분의 영역을 점선으로 표시했다. BMP 파일의 영상이 가지고 있는 색상이 256 색상 이하이면, 즉 색상 수가 2, 16, 256개인 경우에는 색상 테이블이 존재한다. 이와 달리 224=16,777,216가지의 색상을 표현할 수 있는 트루컬러 영상에는 색상 테이블 정보가 존재하지 않아서 BITMAPINFOHEADER 바로 뒤에 픽셀 데이터 정보가 나타난다.

이 책에서는 그레이스케일 영상과 트루컬러 영상에 대한 BMP 파일만 주로 다룰 것이다. 그레이스케일 영상이 아닌 256색 이하의 BMP 파일은 화면에 출력은 가능하지만 이후 영상 처리 알고리즘 구현 시에는 사용할 수 없다.

그레이스케일 영상의 BMP 파일에는 256단계의 무채색을 표현하는 RGBQUAD 배열이 저장되어 있다. RGBQUAD 구조체 하나의 크기가 4바이트이므로 그레이스케일 비트맵의 색상 테이블 영역의 크기는 256*4=1024바이트이다. 그리고 픽셀 데이터 부분에는 각 픽셀의 그레이스케일을 표현하는 RGBQUAD 배열의 인덱스가 저장되어 있다. 트루컬러 영상을 표현하는 BMP 파일은 색상 테이블이 존재하지 않으며, 픽셀 데이터 부분에는 각 픽셀의 색상이 파란색(B), 녹색(G), 빨간색(R) 순서의 3바이트 단위로 저장되어 있다. 우리가 흔히 말하는 RGB 순서가 아닌 BGR 순서임을 주의하기 바란다.

Note | BITMAPFILEHEADER 구조체가 정의되어 있는 파일

BMP 파일을 구성하고 있는 BITMAPFILEHEADER, BITMAPINFOHEADER, RGBQUAD 구조체들은 모두 wingdi.h 파일에 정의되어 있다. 텍스트 편집기로 wingdi.h 파일을 열어보면 각각의 구조체 정의를 찾을 수 있다. 그러나 C/C++ 프로그램에서 BMP 파일을 다룰 경우, wingdi.h 파일보다 windows.h 파일을 포함(include)하는 것이 일반적이다. 이는 windows.h 파일에서 wingdi.h 파일을 포함하면서 더 다양한 windows 관련 사항들을 정의하기 때문이다.

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