{{위키데이터 속성 추적}}
{{infobox file format
| name         = 윈도우 비트맵<br />Windows Bitmap
| extension    = <tt>.bmp</tt>, <tt>.dib</tt>
| mime         = image/bmp, image/x-bmp
| type code    = <tt>'BMP '</tt><br /><tt>'BMPf'</tt><br /><tt>'BMPp'</tt>
| uniform type = com.microsoft.bmp
| genre        = [[래스터 그래픽스]]
| free         = [[윈도우 메타파일|WMF]]용 [[마이크로소프트 OSP|OSP]]
| developer    = [[마이크로소프트]]
}}

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

수많은 [[그래픽 사용자 인터페이스]]는 자체 내장 그래픽 하부 시스템에서 비트맵을 사용한다.<ref>Julian Smart, Stefan Csomor, and Kevin Hock (2006).</ref> 이를테면, 마이크로소프트 윈도우와 OS/2 플랫폼의 [[그래픽 장치 인터페이스|GDI]] 하부 시스템은 <code>.BMP</code>, <code>.DIB</code>의 [[파일 확장자]] 이름을 가진다.

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

== 데이터 블록 ==
일반적으로 쓰이는 BMP는 다음의 데이터 블록을 담고 있다.
{| class="wikitable"
|-
| '''BMP 헤더'''
| BMP 파일에 대한 일반 정보를 담고 있다.
|-
| '''비트맵 정보'''(DIB 헤더)
| 비트맵 그림에 대한 자세한 정보를 담고 있다.
|-
| '''색 팔레트'''
| 인덱스 컬러 비트맵에 쓰이는 색의 정의를 담고 있다.
|-
| '''비트맵 데이터'''
| 화소 대 화소 단위의 실제 그림을 담고 있다.
|}
=== BMP 파일 헤더 ===
{| class="wikitable"
|-
! 오프셋#
! 크기
! 목적
|-
| 0
| 2
| BMP 파일을 식별하는 데 쓰이는 [[매직 넘버 (프로그래밍)|매직 넘버]]: 0x42 0x4D ('''B'''와 '''M'''에 대한 [[아스키 코드|ASCII]] 코드 포인트)
|-
| 2
| 4
| BMP 파일 크기 (바이트 단위)
|-
| 6
| 2
| 예약필드. 실제값은 그림을 만든 데 쓰인 응용 프로그램에 따라 달라진다.
|-
| 8
| 2
| 예약필드. 실제값은 그림을 만든 데 쓰인 응용 프로그램에 따라 달라진다.
|-
| 10
| 4
| 비트맵 데이터를 찾을 수 있는 시작 [[오프셋 (컴퓨터 과학)|오프셋]] (바이트 단위)
|}

=== 비트맵 정보 (DIB 헤더) ===
기본적으로 쓰이는 비트맵 정보는 다음과 같다.
{| class="wikitable"
|- 윈도 V3 헤더
! 크기
! 헤더
! 식별자
! GDI 지원
|-
| 40
| 윈도 V3
| BITMAPINFOHEADER
| [[윈도우 3.0]] 이후의 모든 윈도 버전
|-
| 12
| OS/2 V1
| BITMAPCOREHEADER
| OS/2 및 [[윈도우 3.0]] 이후의 모든 윈도 버전
|-
| 64
| OS/2 V2
|
|
|-
| 108
| 윈도 V4
| BITMAPV4HEADER
| 윈도 [[윈도우 95|95]]/[[윈도우 NT 4.0|NT4]] 이후의 모든 윈도 버전
|-
| 124
| 윈도 V5
| BITMAPV5HEADER
| 윈도 [[윈도우 98|98]]/[[윈도우 2000|2000]] 이상
|}

호환성을 이유로 대부분의 응용 프로그램은 파일을 저장할 때 오래된 DIB 헤더를 사용한다. OS/2가 물러나자, 이제 일반적으로 쓰이는 포맷은 V3 헤더가 되었다. 더 자세한 것은 아래의 표를 참조하라.
{| class="wikitable"
! 오프셋 #
! 크기
! 목적
|-
| 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에서 기본값 2<sup>''n''</sup>.
|-
| 50
| 4
| 중요한 색의 수. 모든 색이 중요할 경우 0. 일반적으로 무시.
|}

압축 방식 (바이트 #30-33)은 다음의 값을 가진다. BI_RGB 비트맵의 경우 그림 크기 필드는 0이 될 수 있다.
{| class="wikitable"
|-
! 값
! 식별자
! 압축 방식
! 비고
|-
| 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 헤더의 모든 값은 [[부호 없는 정수]]이다.
{| class="wikitable"
|-
! 오프셋
! 크기
! 목적
|-
| 14
| 4
| 이 헤더의 크기 (12 바이트)
|-
| 18
| 2
| 비트맵 가로 (화소).
|-
| 20
| 2
| 비트맵 세로 (화소).
|-
| 22
| 2
| 색판의 수. 1이 유일한 유효값이다.
|-
| 24
| 2
| 한 화소에 들어가는 비트 수. 일반적으로 1, 4, 8, 24의 값이 쓰인다.
|}

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

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

== 참조 ==
<references />

== 외부 링크 ==
* [https://web.archive.org/web/20060517173005/http://terms.co.kr/BMP.htm BMP] - 텀즈

{{그래픽 파일 포맷}}
{{압축 형식}}

[[분류:그래픽 파일 포맷]]
[[분류:마이크로소프트 윈도우 멀티미디어 기술]]