5x5 크기의 24비트 이미지 (격자 표시는 이해를 돕기 위한 표현입니다.)
파란색으로 표시된 부분이 비트맵 파일 헤더 (14byte)
이다.
bfType | 42 4D (BM) | BMP 파일 식별자 | |
bfSize | 86 00 00 00 | BMP 파일 크기 | 134 (리틀 엔디안) |
bfReserved1 | 00 00 | 예약된 공간1 | |
bfReserved2 | 00 00 | 예약된 공간2 | |
bfOffBits | 36 00 00 00 | 픽셀 데이터 시작 위치 | 54 (리틀 엔디안) |
크기를 계산할 때는 '리틀 엔디안'으로 계산한다. 이후에는 리틀 엔디안을 직접적으로 언급하지 않는다.
파란색으로 표시된 부분이 비트맵 정보 헤더 DIB (40byte)
이다.
biSize | 28 00 00 00 | 비트맵 정보 헤더 크기 | 40 |
biWidth | 05 00 00 00 | 비트맵 가로 크기 (px) | 5 |
biHeight | 05 00 00 00 | 비트맵 세로 크기 (px) | 5 |
biPlanes | 01 00 | 사용하는 색상판의 수 (항상 1) | 1 |
biBitCount | 18 00 | 픽셀 하나를 표현하는 비트 수 | 18 (3byte) |
biCompression | 00 00 00 00 | 압축방식 (보통 비트맵은 압축을 하지 않기 때문에 0) | 0 |
biSizeImage | 50 00 00 00 | 비트맵 이미지의 픽셀 데이터 크기 |
80 |
biXPelsPerMeter | 00 00 00 00 | 비트맵 이미지의 가로 해상도 (미터당 픽셀 dpm) | 0 |
biYPelsPerMeter | 00 00 00 00 | 비트맵 이미지의 세로 해상도 (미터당 픽셀 dpm) | 0 |
biClrUsed | 00 00 00 00 | 색상 테이블에서 실제 사용되는 색상 수 | 0 |
biClrImportant | 00 00 00 00 | 비트맵을 화면에 표현하기 위해 필요한 색상 인덱스 수 | 0 |
24비트 비트맵 영상에는 색상 테이블이 없다. (1, 4, 8비트 비트맵에 존재)
따라서 비트맵 정보 헤더 다음에 오는 데이터들이 픽셀 데이터이다.
비트맵 정보 헤더의 biBitCount (픽셀 하나를 표현하는 비트 수) 항목을 보면 값이 18로 표시되어 있다.
24비트 비트맵은 1픽셀을 표현하기 위해 B(1byte), G(1byte), R(1byte) 총 3바이트의 데이터를 사용한다. (RGB순서가 아닌 BGR순서라는 것에 주의하자)
5x5 크기의 24비트 비트맵 이미지에서 한 줄을 나타내는 바이트 수
→ 4의 배수 맞추기 → 16
즉, 한 줄을 표현하기 위해 16바이트를 사용한다.
(전체 픽셀 데이터 = 5*16 = 80 = biSizeImage)
파란색으로 선택된 16바이트의 데이터가 이미지의 최하단 1줄에 해당하는 데이터이다.
이미지의 가로너비가 5이고, 1픽셀을 나타내는데 3바이트가 사용되기 때문에 실제로 색상을 표현하는 데 사용되는 바이트는 15바이트(5*3) 이다. 마지막 1바이트의 데이터는 가로 너비를 4의 배수로 맞추기 위한 패딩 값에 해당한다.
파란색으로 선택된 데이터의 처음 3바이트 (hex: CC 48 3F)가 이미지의 좌하단 1픽셀의 데이터이다.
그림판에서 해당 픽셀의 색상을 추출해보면 값이 일치하는 것을 확인할 수 있다. (0xCC: 204, 0x48: 72, 0x3F: 63)