BMP 파일 포맷

위키백과, 우리 모두의 백과사전.
Ykhwong (토론 | 기여)님의 2013년 10월 19일 (토) 21:12 판
윈도 비트맵
Windows Bitmap
파일 확장자.bmp 또는 .dib
인터넷 미디어 타입image/bmp
개발마이크로소프트
포맷 종류래스터 이미지

BMP 파일 포맷비트맵 디지털 그림을 저장하는 데 쓰이는 그림 파일 포맷이다. 특히, 마이크로소프트 윈도, OS/2 운영 체제에 널리 쓰인다. 줄여서 비트맵, 또 장치 독립 비트맵의 경우 DIB 파일 포맷이라고 한다.

수많은 그래픽 사용자 인터페이스는 자체 내장 그래픽 하부 시스템에서 비트맵을 사용한다.[1] 이를테면, 마이크로소프트 윈도와 OS/2 플랫폼의 GDI 하부 시스템은 .BMP, .DIB파일 확장자 이름을 가진다.

기본적으로 1~24비트의 색을 표현할 수 있다. 1비트는 2가지 색이며 24비트는 16777216가지 색이다. 알파 채널을 포함한 32비트 포맷이 윈도 XP에서 발표되었다. 일반적으로 데이터를 압축하지 않고 사용되지만, RLE 압축 방식도 지원한다.

데이터 블록

일반적으로 쓰이는 BMP는 다음의 데이터 블록을 담고 있다.

BMP 헤더 BMP 파일에 대한 일반 정보를 담고 있다.
비트맵 정보 (DIB 헤더) 비트맵 그림에 대한 자세한 정보를 담고 있다.
색 팔레트 인덱스 컬러 비트맵에 쓰이는 색의 정의를 담고 있다.
비트맵 데이터 화소 대 화소 단위의 실제 그림을 담고 있다.

BMP 파일 헤더

오프셋# 크기 목적
0 2 BMP 파일을 식별하는 데 쓰이는 매직 넘버: 0x42 0x4D (BM에 대한 ASCII 코드 포인트)
2 4 BMP 파일 크기 (바이트 단위)
6 2 준비. 실제값은 그림을 만든 데 쓰인 응용 프로그램에 따라 달라진다.
8 2 준비. 실제값은 그림을 만든 데 쓰인 응용 프로그램에 따라 달라진다.
10 4 비트맵 데이터를 찾을 수 있는 시작 오프셋 (바이트 단위)

비트맵 정보 (DIB 헤더)

기본적으로 쓰이는 비트맵 정보는 다음과 같다.

크기 헤더 식별자 GDI 지원
40 윈도 V3 BITMAPINFOHEADER 윈도 3.0 이후의 모든 윈도 버전
12 OS/2 V1 BITMAPCOREHEADER OS/2 및 윈도 3.0 이후의 모든 윈도 버전
64 OS/2 V2
108 윈도 V4 BITMAPV4HEADER 윈도 95/NT4 이후의 모든 윈도 버전
124 윈도 V5 BITMAPV5HEADER 윈도 98/2000 이상

호환성을 이유로 대부분의 응용 프로그램은 파일을 저장할 때 오래된 DIB 헤더를 사용한다. OS/2가 물러나자, 이제 일반적으로 쓰이는 포맷은 V3 헤더가 되었다. 더 자세한 것은 아래의 표를 참조하라.

오프셋 # 크기 목적
14 4 이 헤더의 크기 (40 바이트)
18 4 비트맵 가로 (단위는 화소, signed integer).
22 4 비트맵 세로 (단위는 화소, signed integer).
26 2 사용하는 색 판(color plane)의 수. 1로 설정해야 한다.
28 2 한 화소에 들어가는 비트 수이며 그림의 색 깊이를 뜻한다. 보통 값은 1, 4, 8, 16, 24, 32이다.
30 4 압축 방식. 가능한 값에 대한 목록은 다음 표를 참조하라.
34 4 그림 크기. 압축되지 않은 비트맵 데이터의 크기(아래 참조)이며, 파일 크기와 혼동하지 말 것.
38 4 그림의 가로 해상도. (미터 당 화소, signed integer)
42 4 그림의 세로 해상도. (미터 당 화소, signed integer)
46 4 색 팔레트의 색 수, 또는 0에서 기본값 2n.
50 4 중요한 색의 수. 모든 색이 중요할 경우 0. 일반적으로 무시.

압축 방식 (바이트 #30-33)은 다음의 값을 가진다. BI_RGB 비트맵의 경우 그림 크기 필드는 0이 될 수 있다.

식별자 압축 방식 비고
0 BI_RGB 없음 가장 일반적이다
1 BI_RLE8 RLE 8비트/화소 8비트/화소 비트맵에만 사용할 수 있다.
2 BI_RLE4 RLE 4비트/화소 4비트/화소 비트맵에만 사용할 수 있다.
3 BI_BITFIELDS 비트 필드 16, 32비트/화소 비트맵에만 사용할 수 있다.
4 BI_JPEG JPEG 비트맵은 JPEG 이미지를 포함한다.
5 BI_PNG PNG 비트맵은 PNG 이미지를 포함한다.

OS/2 V1 헤더 또한 자주 쓰인다. OS/2 V1 비트맵은 압축할 수 없으며 한 화소에 16/32 비트의 정보를 담을 수 없다. OS/2 V1 헤더의 모든 값은 부호 없는 정수이다.

오프셋 크기 목적
14 4 이 헤더의 크기 (12 바이트)
18 2 비트맵 가로 (화소).
20 2 비트맵 세로 (화소).
22 2 색판의 수. 1이 유일한 유효값이다.
24 2 한 화소에 들어가는 비트 수. 일반적으로 1, 4, 8, 24의 값이 쓰인다.

BMP 포맷의 사용

BMP 파일 포맷은 단순하고 윈도와 같은 여러 곳에서 널리 쓰일뿐 아니라 상대적으로 특허에서 자유로우므로, 수많은 운영 체제가 제공하는 그림 처리 프로그램이 읽고 쓸 수 있는 매우 일반적인 포맷으로 자리잡았다.

대부분의 BMP 파일은 압축을 거의 하지 않아 상대적으로 크기가 큰 반면, 수많은 BMP 파일은 ZIP과 같은 무손실 데이터 압축 알고리즘으로 상당 용량을 압축할 수 있다.

참조

  1. Julian Smart, Stefan Csomor, and Kevin Hock (2006).

바깥 고리