비트맵 포멧 중 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 가 됩니다.
'메모장 > 기타' 카테고리의 다른 글
[AWS] AWS EC2 인스턴스 생성 (0) | 2022.01.26 |
---|---|
[Git/Github/SourceTree] 소스트리 로그인 인증 오류 해결법 (+ 토큰 및 SSH 키 생성,인증) (1) | 2021.08.31 |
[Sourcetree] 소스트리 로그인 오류시 해결 방법 (인증 오류 해결 방법) (0) | 2020.10.28 |
Git LFS (Large File Storage) - 100MB 이상의 파일을 깃허브에 올리기 (0) | 2019.06.03 |
Git .ignore 적용후 동기화 시키기 (0) | 2019.05.02 |