본문 바로가기

메모장/기타

24bit 비트맵 파일의 구조와 파일 크기 산출 (24bit .bmp file)

비트맵 포멧 중 24bit 포멧, DIB 헤더를 사용하는 .bmp 파일의 구조를 분석한 글입니다.

 

기본 비트맵 헤더 (14byte)

offset size (byte) info
0 2 비트맵 파일임을 식별하는 Magic Number (0x42 0x4D)
2 4 파일 크기 (byte 단위)
6 2 임시 할당
8 2 임시 할당
10 4 데이터 시작 offset (DIB 헤더는 0x36 고정) (0x36 = 54byte)

DIB 헤더 (40byte)

offset size (byte) info
14 4 DIB 헤더 크기 (0x28) (=40byte)
18 4 bmp 파일의 가로 픽셀 수
22 4 bmp 파일의 세로 픽셀 수
26 2 color plane (항상 1)
28 2 1개의 픽셀을 표현할 비트의 수 24비트 포멧이므로 24고정 (0x18) (=24bit)
30 4 압축 포멧 (없을 경우 0)
34 4 그림의 크기 (.bmp 파일 크기 - 헤더 크기) (byte 단위)
38 4 가로 해상도 (미터당 픽셀의 수) (pixel/m)
42 4 세로 해상도 (미터당 픽셀의 수) (pixel/m)
46 4 number of color palette (16bit 이상 포멧에서는 항상 0)
50 4 number of important color (보통은 0)

픽셀 데이터

  • 1픽셀 당 24bit(=3byte)를 할당합니다. (RGB에 각각 8bit 씩)
  • 파일 끝에는 항상 2byte의 패딩이 있습니다.
  • 한 줄을 채운 후 해당 줄의 총 바이트 수가 4의 배수가 될 때 까지 패딩으로 채웁니다.

 

10x10 bmp 파일을 예로 들겠습니다.

헤더의 크기는 54byte 고정입니다. (14byte + 40byte)

픽셀 데이터의 크기는

기본 -> 픽셀당 3byte * 10(가로) * 10(세로) = 300byte

줄 패딩 -> 3byte * 10 = 30byte 임으로 32byte 가 될 때 까지 패딩으로 채웁니다.

따라서 줄당 2바이트가 추가됩니다. 10(세로) * 2byte = 20byte

파일 끝 패딩 -> 마지막으로 파일 끝부분에 2byte의 패딩이 추가됩니다. 2btye

따라서 데이터 총 크기는 300 + 20 + 2 = 322byte 가 됩니다.

10 x 10 사이즈의 24bit 포맷 bmp 파일의 크기는 54 + 322 = 376byte 가 됩니다.