2009. 7. 15. 13:34

비트맵 헤더 분석

이번엔 실제 BMP파일을 헥스뷰어로 열어보고 헤더의 정보를 살펴보도록 하겠다.


위의 BMP 파일을 WinHex 같은 헥스뷰어로 열어보면, 다음과 같은 화면을 볼 수 있다.


BMP 헤더 정보
1. 0x0 ~ 0x1: 가장 처음의 두 바이트는 매직넘버이다. B와 M에 해당하는 ASCII값인 42, 4D가 보인다.

2. 0x2 ~ 0x5: 그 다음 부터 4바이트는 파일의 크기이다. 다만, 리틀 인디안으로 저장되어 있으므로 0x64356가 된다. 실제로 저 그림 파일을 다운받아 저장해보면 410,454 바이트인것을 알 수 있는데 이를 16진수로 변환하면 0x64356이 된다.

3. 그 다음 2바이트와 그 다음 2바이트는 응용프로그램에 따라 달라지는데 이는 다음 기회에 알아보도록 하자.

4. 0xA ~ 0xD : 픽셀 데이터의 시작 위치 이다. 헤더의 크기 14바이트와 비트맵 정보 40바이트(윈도우v3 비트맵일 경우. 대부분 이경우다.), 총 54바이트 다음인 0x36번지 부터 픽셀데이터가 기록되어 있다.

비트맵 정보
1. 0xE ~ 0x11 : 헤더의 크기. 0x28 = 40 이므로 헤더의 크기는 40바이트이다. 즉, 윈도우 v3 비트맵이란 이야기.

2. 0x12 ~ 0x15 : 비트맵 가로크기. 비트맵은 그림의 가로 길이가 4의 배수가 아닌 경우 더미 데이터가 들어가게 된다. 0x1E0 = 480 이므로, 이 비트맵의 가로 크기는 480이다.

3. 0x16 ~ 0x19 : 비트맵 세로 크기.

4. 0x1A ~ 0x1B : 사용하는 색 판(color plane)의 수. 1로 설정해야 한다.

5. 0x1C ~ 0x1D :
한 화소에 들어가는 비트 수이며 그림의 색 깊이를 뜻한다. 보통 값은 1, 4, 8, 16, 24, 32이다. 이 파일의 경우는 0x18 = 24비트이다.

6. 0x1E ~ 0x21 :
압축 방식. 비트맵도 압축 방식이 있다. 하지만 잘 사용하지 않는다. 따라서 값은 0.

7. 0x22 ~ 0x25 :
그림 크기. 압축되지 않은 비트맵 데이터의 크기이며, 파일 크기와 혼동하지 말 것. 즉, 헤더를 제외한 크기. 이 파일의 경우에는 0x64320인데 파일크기는 0x64356이므로, 0x36바이트 즉, 54바이트의 헤더를 제외한 만큼 차이가 난다.

8. 0x26 ~ 0x29 : 그림의 가로 해상도. (미터 당 화소, signed integer)

9. 0x2A ~ 0x2D :
그림의 세로 해상도. (미터 당 화소, signed integer)

10. 0x2E ~ 0x31 :
색 팔레트의 색 수, 또는 0에서 기본값 2n.

11. 0x32 ~ 0x35 :
중요한 색의 수. 모든 색이 중요할 경우 0. 일반적으로 무시.

픽셀 데이터

0x36 ~ : 한 픽셀을 표현하기 위해 R, G, B 3바이트가 필요하므로, 3바이트씩 한픽셀을 표현한다. 다만 리틀 인디언이므로 BGR의 순으로 저장되어 있다. 또한, BMP파일은 그림의 상하를 반대로 저장하므로 첫 픽셀의 정보는 그림의 가장 아래줄 첫번째 픽셀이 된다.

'공부합시다 > 영상처리' 카테고리의 다른 글

VFW 영상 처리 함수  (0) 2009.07.21
비트맵 파일의 구조  (0) 2009.07.15