더북(TheBook)

3.2.5 픽셀 데이터

색상 테이블 영역 다음에는 실제 영상의 픽셀 정보를 담고 있는 픽셀 데이터의 배열이 나타난다. 색상 테이블이 없는 트루컬러 비트맵의 경우에는 BITMAPINFOHEADER 뒤에 바로 픽셀 데이터 구역이 나타난다. 픽셀 데이터 구역은 각 픽셀의 색상 정보를 담고 있다.

트루컬러 비트맵의 경우, 하나의 픽셀 당 3바이트를 사용하여 픽셀 정보를 표현한다. 이때 각 픽셀을 나타내는 3바이트는 차례대로 파란색(B), 녹색(G), 빨간색(R)의 정보를 나타낸다. B, G, R 각각의 색상 성분은 0~255 사이의 정숫값으로 표현된다. 색상 테이블이 있는 비트맵의 경우에는 1바이트를 사용하여 색상 테이블 인덱스를 저장한다. 256색 이하의 비트맵에만 색상 테이블이 존재하므로, 1바이트로 충분히 색상 테이블 인덱스를 지정할 수 있다.

일반적으로 비트맵은 상하가 뒤집힌bottom-up 상태로 저장된다. BITMAPINFOHEADER 구조체의 biHeight 값이 양수로 저장되어 있을 경우에 뒤집힌 상태로 저장된다는 말이 정확한 표현이지만, 대부분의 경우 biHeight가 양수로 저장되기 때문에 항상 뒤집힌 상태라고 생각해도 무방하다. 혼동하지 말아야 할 것은 상하가 그대로 뒤집히는 것이지 180˚ 회전된 형태가 아니다. 그림 3-2를 참고하기 바란다.

그림 3-2 비트맵에서 픽셀 데이터를 상하가 뒤집힌 방식으로 저장

한 가지 더 주의할 점은 영상이 비트맵 형태로 저장될 때, 효율적인 데이터 관리를 위하여 영상의 가로 크기를 4의 배수 형태로 저장한다는 점이다. 예를 들어 그레이스케일 영상의 크기가 3×3이라고 하더라도, BMP 파일로 저장될 때에는 픽셀 데이터 배열에 4×3(가로×세로)의 크기로 저장된다는 뜻이다. 실제 비트맵의 가로 픽셀 크기는 3이지만, 4바이트 단위로 저장되기 때문에 여분의 1바이트를 추가하는 것이다. 3×3 크기의 트루컬러 비트맵의 경우, 가로 한 줄의 픽셀들은 3(픽셀)×3(바이트)=9바이트면 표현할 수 있지만, 실제 저장 시에는 9보다 큰 4의 배수인 12바이트를 사용한다. 이러한 비트맵 표현 방식의 예를 그림 3-3에 나타내었다. 여분으로 추가되는 픽셀 위치에는 임의의 값이 할당되며, 실제 프로그램에서는 사용하지 않는다.

그림 3-3 3x3 크기 영상의 비트맵 픽셀 데이터 정렬 방식
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.