본문 바로가기

etc

BMP File Header


이번에 BMP파일 헤더 구조를 한 번 설명해 보려 합니다.


일단 전체 헤더를 살펴보겠습니다.





제가 임의로 작성한 헤더입니다. 밑의 0xFF로 이루어진 부분은 사진파일의 실제 리소스가 되겠네요. 자 일단 하나씩 살펴보겠습니다.





자, 일단 맨 먼저 나오는 0x42 0x4D로 이루어진 부분입니다. 이 부분은 PE의 MZ처럼 BMP파일임을 알려주는 시그니쳐 입니다. 고정값이구요. BM이라고 적혀 있네요. 총 2bytes를 차지 합니다.



 


그 다음은 BMP파일의 전체 사이즈를 적어 줍니다. 여기서의 사이즈는 헤더부분을 포함한 사이즈 입니다. 중요한 점은 전체 크기를 리틀 엔디언 방식으로 적어 주셔야 한다는 것입니다.

따라서 이 파일의 전체 크기는 0x43A2D가 되겠네요. 제가 임의로 작성한 헤더라 크기가 비정상적으로 크네요.. 총 4bytes를 차지합니다.





그 다음 부분은 총 4bytes를 모두 0으로 채워주어야 합니다. 예약된 공간이라는데 사용하면 안된다네요. 고정값입니다.





그 다음은 실제 사진 데이터가 시작되는 곳의 주소를 나타 냅니다. 역시 리틀 엔디언으로 적어 주셔야 하구요. 그냥 고정값 0x36으로 보셔도 무방합니다. 총 4bytes를 차지 합니다.





그 다음은 저 0x28부터 파일헤더(File Header)가 아닌 BMP인포헤더(Info Header) 입니다. 저 0x28이 인포헤더의 크기입니다. 거의 0x28로 고정값입니다. 역시 4bytes를 차지합니다.





이번에는 정말 중요한 가로 해상도 입니다. 0x87, 135픽셀이네요. 총 4bytes 리틀엔디언으로 작성 해 주셔야 하구요.





이거는 세로 해상도 입니다. 위 가로 해상도와 같은 방식으로 작성해 주시면 됩니다.




[출처] bmp 파일 구조|작성자 옥탑방훼인

비트맵 파일의 Plane수라는데 그냥 1로 고정값 입니다. 총 2bytes를 사용합니다.





BPP라고 한 픽셀이 가지는 색의 수를 나타 낸답니다. 이 부분은 저도 잘 모르겠는데요. 대부분 0x18로 쓰는 것 같습니다. 2bytes를 차지합니다.





압축 타입을 나타내는 데에 쓰입니다. 0은 무압축, 1은 RLE8, 2는 RLE4입니다. 더 자세한 건 직접 한 번 찾아보세요. 총 4bytes를 차지 합니다.





이번에는 사진 데이터만의 크기 입니다. 헤더파일 크기는 제외한 크기 입니다. 총 4bytes를 차지하고 리틀 엔디언으로 적어 주셔야 합니다.


그 뒤 부분은 길이당 픽셀과 색상 관련 정보들인데 모두 0으로 채워주셔도 상관 없습니다.

사실 뒷 부분은 저도 잘은 모르겠네요. 이렇게 헤더를 작성해 주시고 뒤에 데이터들을 넣어 주시면 비트맵 파일이 완성이 되게 됩니다.

'etc' 카테고리의 다른 글

리눅스 가상 시리얼 포트 열기  (0) 2018.03.08