BMP 파일 형식

BMP file format
윈도 비트맵
파일 이름 확장명
.bmp,.dib
인터넷 미디어 유형image/bmp[1]
image/x-bmp
유형코드'BMP '
'BMPf'
'BMPp'
동일 유형 식별자(UTI)com.com.bmp.
개발자마이크로소프트 코퍼레이션
형식 유형래스터 그래픽스
오픈 포맷?WMF용 OSP

비트맵 이미지 파일, 장치 독립 비트맵(DIB) 파일 형식비트맵이라고도 하는 BMP 파일 형식디스플레이 장치(그래픽 어댑터 등)와 독립적으로 비트맵 디지털 이미지를 저장하는 데 사용되는 래스터 그래픽 이미지 파일 형식이며, 특히 마이크로소프트 윈도우즈[2]OS/2[3] 운영 체제에서 사용된다.

BMP 파일 형식은 단색 및 색상, 다양한 색의 깊이, 선택적으로 데이터 압축, 알파 채널색상 프로파일을 사용하여 2차원 디지털 이미지를 저장할 수 있다.WMF(Windows Metafile) 사양은 BMP 파일 형식을 다룬다.[4]

장치 독립적인 비트맵 및 BMP 파일 형식

Diagram 1 – The structure of the bitmap image file
다이어그램 1 – 비트맵 이미지 파일의 구조

Microsoft는 다양한 내부 표현을 통해 장치와 애플리케이션 간에 비트맵을 교환하는 보조 도구로서 다양한 색상의 깊이를 가진 색상 비트맵의 특정 표현을 정의했다.이들은 이러한 장치 독립적인 비트맵이나 DIB라고 불렀으며, 이들에 대한 파일 형식은 DIB 파일 형식 또는 BMP 이미지 파일 형식이라고 불린다.

Microsoft 지원:[5]

장치 독립 비트맵(DIB)은 다양한 색 해상도로 장치 독립 비트맵을 정의하는 데 사용되는 형식이다.DIB의 주요 목적은 비트맵을 한 장치에서 다른 장치로 이동할 수 있도록 하는 것이다(이름의 장치 독립적인 부분).DIB는 장치에 의존하는 비트맵과는 대조적으로 외부 형식이며, 비트맵 객체(응용프로그램에 의해 생성...)로 시스템에 나타난다.DIB는 일반적으로 메타파일(일반적으로 스트레치DIBits() 함수를 사용), BMP 파일 및 클립보드(CF_DIB 데이터 형식)로 전송된다.

다음 절에서는 BMP 파일 또는 DIB에 저장된 데이터를 자세히 논의한다.이것은 표준 BMP 파일 형식이다.[5]일부 응용 프로그램은 마이크로소프트 설명서와 호환되지 않는 비트맵 이미지 파일을 생성한다.또한 모든 필드를 사용하는 것은 아니며, 이러한 사용되지 않는 필드에서 0의 값을 찾을 수 있다.

파일 구조

비트맵 이미지 파일은 고정 크기 구조(헤더)뿐만 아니라 미리 정해진 순서에 따라 나타나는 가변 크기 구조로 구성된다.이 파일 형식의 긴 진화 때문에 이러한 구조의 많은 다른 버전이 파일에 나타날 수 있다.

도표 1을 참조하여 비트맵 파일은 다음과 같은 순서로 구조로 구성된다.

구조명 선택적 크기 목적 평.
비트맵 파일 헤더 아니요. 14바이트 비트맵 이미지 파일에 대한 일반 정보를 저장하려면 다음과 같이 하십시오. 파일이 메모리에 로드된 후에는 필요하지 않음
DIB 헤더 아니요. 고정사이즈
(7가지 다른 버전이 있음)
비트맵 이미지에 대한 자세한 정보를 저장하고 픽셀 형식을 정의하려면 다음과 같이 하십시오. 비트맵 파일 헤더 바로 뒤에 있음
엑스트라 비트 마스크 DWORD[6] 서너 개
(12 또는 16바이트)
픽셀 형식을 정의하려면 다음과 같이 하십시오. DIB 헤더가 BITMAPINFOHEADER이고 압축 방법 멤버가 BI_B로 설정된 경우에만 표시ITFELS 또는 BI_ALAPABITFields
컬러 테이블 반선택적 가변 크기 비트맵 이미지 데이터에 사용되는 색상을 정의하려면(픽셀 배열) 색상 깊이 ≤ 8비트의 경우 필수 사항
갭1 가변 크기 구조물 정렬 비트맵 파일 헤더에 있는 픽셀에 대한 파일 오프셋의 아티팩트
픽셀 배열 아니요. 가변 크기 픽셀의 실제 값을 정의하려면 다음과 같이 하십시오. 픽셀 형식은 DIB 헤더 또는 Extra 비트 마스크로 정의된다.픽셀 배열의 각 행이 4바이트 크기의 배수로 패딩됨
갭2 가변 크기 구조물 정렬 DIB 헤더의 ICC 프로파일 데이터 오프셋 필드 아티팩트
ICC 색상 프로파일 가변 크기 색 관리를 위한 색 프로필을 정의하려면 다음과 같이 하십시오. 색 프로필을 포함하는 외부 파일에 대한 경로도 포함할 수 있다."비포장 DIB"로 메모리에 로드되면 컬러 테이블과 Gap1 사이에 위치한다.[7]

메모리 내 DIB

메모리에 로드된 비트맵 이미지 파일은 DIB 데이터 구조가 되며, 이는 Windows GDI API의 중요한 구성 요소가 된다.인메모리 DIB 데이터 구조는 BMP 파일 형식과 거의 동일하지만, 14바이트 비트맵 파일 헤더를 포함하지 않고 DIB 헤더로 시작한다.메모리에 로드된 DIB의 경우 색상표는 명시적 RGB 색상 정의 대신 현재 실현된 팔레트에[8] 대한 색인을 구성하는 16비트 항목(추가된 방향 수준)으로 구성될 수 있다.모든 경우에 픽셀 배열이 4바이트의 배수인 메모리 주소에서 시작되어야 한다.메모리에 로드된 비패키지 DIB에서 선택적 색상 프로파일 데이터는 색상표 바로 뒤에, 갭1과 픽셀 배열[7] 바로 앞에 위치해야 한다(diag. 1과 달리).

갭1과 갭2의 크기가 0일 때, 메모리 내 DIB 데이터 구조를 관습적으로 "패킹된 DIB"라고 하며, DIB 헤더의 시작을 가리키는 단일 포인터로 참조할 수 있다.모든 경우에 픽셀 배열이 4바이트의 배수인 메모리 주소에서 시작되어야 한다.픽셀 배열의 메모리 주소를 4바이트의 배수로 강제하기 위해 색상표의 항목 수를 조정할 필요가 있는 경우도 있다.[8]메모리에 로드된 "패킹된 DIB"의 경우 선택적 색상 프로파일 데이터는 diag. 1(갭1=0 및 갭2=0)에 표시된 대로 픽셀 배열을 즉시 따라야 한다.[7]
"패킹된 DIB"는 Windows 클립보드 API 기능과 일부 Windows 패턴 브러시 및 리소스 기능에 필요하다.[9]

비트맵 파일 헤더

이 바이트 블록은 파일 시작 부분에 있으며 파일을 식별하는 데 사용된다.일반적인 애플리케이션은 파일이 실제로 BMP 파일이고 손상되지 않았는지 확인하기 위해 이 블록을 먼저 읽는다.BMP 파일 형식의 처음 2바이트는 ASCII 인코딩에서 문자 "B"와 문자 "M"이다.모든 정수 값은 little-endian 형식(즉, 최소 유의 바이트 우선)으로 저장된다.

오프셋 16진수 간격띄우기 데크 크기 목적
00 0 2바이트 BMP 및 DIB 파일을 식별하는 데 사용되는 헤더 필드는0x42 0x4D와 같은 16진법으로BMASCII로다음과 같은 항목이 가능하다.
BM
Windows 3.1x, 95, NT 등
BA
OS/2 구조 비트맵 배열
CI
OS/2 구조체 색상 아이콘
CP
OS/2 const 색상 포인터
IC
OS/2 구조체 아이콘
PT
OS/2 포인터
02 2 4바이트 BMP 파일의 크기(바이트)
06 6 2바이트 예약됨. 실제 값은 이미지를 생성하는 애플리케이션에 따라 다름. 수동으로 생성한 경우 0이 될 수 있음
08 8 2바이트 예약됨. 실제 값은 이미지를 생성하는 애플리케이션에 따라 다름. 수동으로 생성한 경우 0이 될 수 있음
0A 10 4바이트 비트맵 이미지 데이터(픽셀 배열)를 찾을 수 있는 바이트의 오프셋, 즉 시작 주소.

DIB 헤더(비트맵 정보 헤더)

이 바이트 블록은 응용 프로그램에 이미지에 대한 자세한 정보를 알려주고, 이 정보는 화면에 이미지를 표시하는 데 사용될 것이다.블록은 또한 윈도우즈와 OS/2에서 내부적으로 사용하는 헤더와 일치하며 몇 가지 다른 변형을 가지고 있다.모두 dword(32비트) 필드를 포함하며 크기를 지정해 이미지에서 사용되는 헤더를 응용 프로그램이 쉽게 결정할 수 있도록 한다.헤더가 다른 이유는 마이크로소프트가 DIB 포맷을 여러 번 확장했기 때문이다.새로운 확장 헤더는 이전 헤더 대신 일부 GDI 기능과 함께 사용할 수 있어 더 많은 기능을 제공한다.GDI는 비트맵 파일을 로드하는 기능을 지원하므로 일반적인 Windows 애플리케이션은 이 기능을 사용한다.이것의 한 가지 결과는 그러한 애플리케이션의 경우, 그들이 지원하는 BMP 형식이 실행 중인 Windows 버전에서 지원하는 형식과 일치한다는 것이다.자세한 내용은 아래 표를 참조하십시오.

Windows 및 OS/2 비트맵 헤더
크기 헤더명 OS 지원 특징들 작성자
12 비트맵코어헤더
OS21X비트맵헤더
Windows 2.0 이상
OS/2 1.x[3]
64 OS22X비트맵헤더 OS/2 비트맵코어헤더2 하프톤을 추가한다.RLEHuffman 1D 압축 추가.
16 OS22X비트맵헤더 이전 헤더의 이 변형은 처음 16바이트만 포함하고 나머지 바이트는 0 값으로 가정한다.[3]

그러한 경우의 예는 BMP Suite의 그래픽 pal8os2v2-16.bmp이다[10].[11]

40 비트맵인포헤더 Windows NT, 3.1x 이상[2] 비트맵 너비와 높이를 4바이트로 확장16 bpp 및 32 bpp 형식을 추가한다.RLE 압축을 추가한다.
52 비트맵V2인포헤더 문서화되지 않음 RGB 비트 마스크 추가. 어도비 포토샵
56 비트맵V3인포헤더 공식적으로 문서화되지는 않았지만 이 문서는 Adobe의 포럼에 표준이 공식 MS 문서에[12] 포함된 과거 한 시점에 있었다는 문구와 함께 게시되었다. 알파 채널 비트 마스크 추가. 어도비 포토샵
108 비트맵V4헤더 Windows NT 4.0, 95 이상 색상 공간 유형 및 감마 보정 추가
124 비트맵V5헤더 Windows NT 5.0, 98 이상 ICC 색상 프로파일 추가 더 KIMP
오프셋(헥스) 오프셋(dec) 크기(바이트) OS/2 1.x 비트맵코어헤더[3]
0E 14 4 이 헤더의 크기(12바이트)
12 18 2 비트맵 너비(픽셀)(부호화되지 않은 16비트)
14 20 2 비트맵 높이(픽셀)(부호화되지 않은 16비트)
16 22 2 색상 평면 수, 1이어야 함
18 24 2 픽셀당 비트 수
OS/2 1.x 비트맵은 압축되지 않으며 16 또는 32bpp가 될 수 없다.

Windows 2.x BITMAPCOREHEADER는 이미지 너비와 높이 필드가 부호가 아닌 서명된 정수라는 한 가지 세부사항에서 OS/2 1.x BITMAPCOREHEADER(위 표에 표시됨)와 다르다.[13]

비트맵INFOHEADER 이후의 버전은 이전 버전의 헤더 끝에 필드만 추가한다.예: 비트맵V2INFOHEADER는 비트맵INFOHEADER에 필드를 추가하고 비트맵V3INFOHEADER는 비트맵V2INFOHEADER에 필드를 추가한다.

통합 알파 채널은 문서화되지 않은 BITMAPV3INFOHEADER와 문서화된 BITMAPV4HEADER(Windows 95 이후)와 함께 도입되었으며 Microsoft Office(v2000 이후)는 물론 Windows XP 로그온 및 테마 시스템 내에서 사용되며 버전 7 및 Adobe Flash와 같은 일부 이미지 편집 소프트웨어에서 지원된다.ce 버전 MX 2004(당시 Macromedia Flash로 알려져 있음)그것은 또한 KIMP, 구글 크롬, 마이크로소프트 파워포인트, 마이크로소프트 워드의 지원을 받고 있다.

호환성을 위해 대부분의 응용 프로그램은 파일을 저장할 때 이전 DIB 헤더를 사용한다.윈도우즈 2000 이후 OS/2가 더 이상 지원되지 않는 경우, 현재 일반적인 윈도우즈 형식은 BITMAPINFOHEADER 헤더 입니다.자세한 내용은 다음 표를 참조하십시오.명시적으로 명시되지 않은 한 모든 값은 부호 없는 정수로 저장된다.

오프셋(헥스) 오프셋(dec) 크기(바이트) Windows 비트맵인포헤더[2]
0E 14 4 이 헤더의 크기(바이트)(40)
12 18 4 비트맵 너비(서명 정수)
16 22 4 비트맵 높이(서명 정수)
1A 26 2 색상 평면 수(1개 포함)
1C 28 2 이미지의 색 깊이인 픽셀당 비트 수대표적인 값은 1, 4, 8, 16, 24, 32이다.
1E 30 4 사용 중인 압축 방법가능한 값 목록은 다음 표를 참조하십시오.
22 34 4 이미지 크기이것은 원시 비트맵 데이터의 크기이며, BI_RGB 비트맵에 더미 0을 제공할 수 있다.
26 38 4 이미지의 수평 해상도(미터당 평균 수, 서명 정수)
2A 42 4 이미지의 수직 해상도(미터당 평균 수, 서명 정수)
2E 46 4 색상 팔레트의 색상 수 또는 기본값n 2로 0 설정
32 50 4 사용된 중요한 색의 수, 또는 모든 색이 중요한 경우 0; 일반적으로 무시됨

압축 방법(오프셋 30)은 다음과 같을 수 있다.

가치 식별자 압축법 평.
0 BI_RGB 없는 가장 흔한
1 BI_RLE8 RLE 8비트/픽셀 8비트/픽셀 비트맵에서만 사용 가능
2 BI_RLE4 RLE 4비트/픽셀 4비트/픽셀 비트맵에서만 사용 가능
3 BI_BITFieldS OS22XBITMAPHEADER: 허프먼 1D 비트맵V2인포헤더: RGB 비트 필드 마스크,
BITMAPV3INFOHEADER+: RGBA
4 BI_JPEG OS22XBITMAPHEADER: RLE-24 BITMAPV4INFOHEADER+: 인쇄용[14] JPEG 이미지
5 BI_PNG BITMAPV4INFOHEADER+: 인쇄용[14] PNG 이미지
6 BI_ALAPABITFields RGBA 비트 필드 마스크 Windows CE 5.0만(가 있음)NET 4.0 이상
11 BI_CMYK 없는 Windows Metafile CMYK[4] 해당
12 BI_CMYKRLE8 RLE-8 Windows Metafile CMYK만 해당
13 BI_CMYKRLE4 RLE-4 Windows Metafile CMYK만 해당

OS/2 2.x OS22XBITMAPHEADER(IBM 설명서의 BITMAPINFOHEADER2)에는 24개의 추가 바이트가 포함되어 있다.[3]

오프셋(헥스) 오프셋(dec) 크기(바이트) OS/2 OS22XB잇맵헤더([3]비트맵인포헤더2)
36 54 2 수평 및 수직 분해능의 단위를 지정하는 열거된 값(오프셋 38 및 42).유일하게 정의된 값은 0이며, 미터당 픽셀을 의미한다.
38 56 2 패딩무시되며 0이어야 함
3A 58 2 비트가 비트맵을 채우는 방향을 나타내는 열거된 값.유일하게 정의된 값은 0이며, 이는 원점이 왼쪽 아래 모서리라는 것을 의미한다.비트는 왼쪽에서 오른쪽으로 채워지고, 그 다음에 아래쪽에서 위쪽까지 채워진다.

Windows 비트맵(이 필드 포함 안 함)도 이미지 높이에 음수 값을 사용하여 왼쪽 상단의 원점(비트 채워진 다음 위에서 아래로 채워짐)을 지정할 수 있다는 점에 유의하십시오.

3C 60 2 이미지를 렌더링할 때 사용해야 하는 중간 조정 알고리즘을 나타내는 열거된 값.
40 64 4 중간 조정 매개 변수 1(아래 참조)
44 68 4 중간 조정 파라미터 2(아래 참조)
48 72 4 색상 테이블의 각 항목에 대한 색상 인코딩을 나타내는 열거된 값.유일하게 정의된 값은 0이며, RGB를 나타낸다.
4C 76 4 응용 프로그램 정의 식별자.이미지 렌더링에 사용되지 않음

하프톤 알고리즘(오프셋 60)은 다음과 같을 수 있다.

가치 하프톤 알고리즘 평.
0 없는 가장 흔한
1 오차확산 중간 조정 파라미터 1(오프셋 64)은 오류 댐핑의 백분율이다.100은 댐핑이 없음을 의미한다.0은 오류가 분산되지 않았음을 나타냄
2 PANDA: 코드화되지 않은 문서 획득을 위한 처리 알고리즘 하프톤먼트 파라미터 1과 2(각각 오프셋 64와 68)는 사용된 하프톤 패턴의 X와 Y 치수를 픽셀 단위로 나타낸다.
3 초원 하프톤먼트 파라미터 1과 2(각각 오프셋 64와 68)는 사용된 하프톤 패턴의 X와 Y 치수를 픽셀 단위로 나타낸다.

컬러 테이블

컬러 테이블(팔레트)은 BMP 파일 헤더, DIB 헤더 바로 뒤에, 그리고 BI_B가 있는 BITMAPINFOHEADER 헤더가 있는 경우 선택 사항인 3, 4 비트마스크 뒤에 BMP 이미지 파일에서 발생한다.ITFELS(12바이트) 또는 BI_ALAPABITFELS(16바이트) 옵션이 사용된다.따라서, 그것의 오프셋은 비트맵FILEHEADER의 크기와 DIB 헤더의 크기(3비트 또는 4비트 마스크의 경우 옵션 12-16바이트)이다.
참고: Windows CE에서는 BITMAPINFOHEADER 헤더를 BI_ALFAB과 함께 사용할 수 있음biCompression 멤버의 ITFELS[6] 옵션.

팔레트의 항목 수는 2개n(여기서 n은 픽셀당 비트 수)이거나 헤더에 지정된 더 작은 수(OS/2 BITMAPCOREHEADER 헤더 형식에서는 풀사이즈 팔레트만 지원됨)[3][5]이다.대부분의 경우 색상표의 각 항목은 파란색, 녹색, 빨간색, 0x00 순서로 4바이트를 차지한다(예외 사항은 아래 참조).이것은 구조물 멤버 biBitCount의 BITMAPINFOHEADER에서 색인화된다.

컬러 테이블은 이미지에 사용되는 색상을 나열하는 바이트 블록(테이블)이다.인덱싱된 컬러 영상의 각 픽셀은 이 표에서 설명하는 단일 색상의 색인 비트 수(1, 4 또는 8)로 설명된다.색인 색상 비트맵에서 색상 팔레트의 목적은 이러한 색인 값이 각각 해당하는 실제 색상에 대해 응용 프로그램에 알리는 것이다.비색인(비색인) 비트맵에 있는 컬러 테이블의 목적은 색상 표시 기능이 제한된 장치에 최적화 목적으로 비트맵에서 사용하는 색상을 나열하고 향후 다른 픽셀 포맷으로 변환 및 팔레트화를 용이하게 하기 위함이다.

색상표의 색상은 일반적으로 항목당 RGBA32 형식 4바이트로 지정된다.OS/2 비트맵코어헤더와 함께 사용되는 컬러 테이블은 항목당 3바이트 RGB24 형식을 사용한다.[3][5]메모리에 로드된 DIB의 경우 색상표는 선택적으로 2바이트 항목으로 구성될 수 있으며, 이러한 항목은 명시적 RGB 색상 정의 대신 현재 실현된 팔레트에[8] 대한 색인을 구성한다.

Microsoft는 1bpp, 4bpp, 8bpp 인덱스 컬러 영상에 대해 BITMAPV4HEADER 및 BITMAPV5HEADER에 유효한 알파 채널 비트 마스크의[15] 존재를 허용하지 않으며, 이는 컬러 테이블 항목이 8.8.8.[0-8]을 사용하여 알파 구성 요소도 지정할 수 있음을 나타낸다.RGBQUAD.rgbReserved[16] 멤버를 통한 [0-8] 형식.그러나 Microsoft 설명서 일부 버전에서는 RGBQUAD.rgbReserved 멤버가 "0이어야 한다"고 명시하여 이 기능을 허용하지 않는다.

위에서 언급했듯이, 픽셀당 16비트(16bpp) 형식 이상일 때는 일반적으로 컬러 테이블이 사용되지 않으며, 비트맵 이미지 파일에는 일반적으로 컬러 테이블 항목이 없다.이것 또한 지정하는 하지만, 마이크로 소프트 문서(11월 16일 2010[17]의 자세한 내용은 MSDN웹 사이트에)은 16bpp(그리고 더 높은), 색 정의표 색의 목록을 제한된 컬러 디스플레이 능력으로 기기에 최적화를 위한 저장하기 위한 자리에 참석할 수 있과 같은 경우에, 인덱싱 된 팔레트 항목 이 물산에서 지정lor 테이블.필수 팔레트 항목과 선택적 색상 리스트를 구분하지 않는 경우 이는 모순으로 보일 수 있다.

픽셀 저장

비트맵 픽셀을 나타내는 비트는 행으로 포장되어 있다.각 행의 크기는 패딩으로 4바이트(32비트 DWORD)의 배수로 반올림된다.

높이가 1 이상인 영상의 경우 여러 개의 패딩된 행이 연속적으로 저장되어 픽셀 배열을 형성한다.

픽셀의 한 행을 저장하는 데 필요한 총 바이트 수는 다음과 같이 계산할 수 있다.

ImageWidth는 픽셀로 표현된다.위의 방정식은 바닥과 천장 기능을 사용한다.

픽셀 배열을 다음 위치에 저장하는 데 필요한 총 바이트 수n2가지n 색상으로 구성된 픽셀당 비트(bpp) 영상은 다음과 같이 각 행의 크기를 4바이트의 배수로 반올림하는 효과를 고려하여 계산할 수 있다.

PixelArraySize = RowSize · 이미지높이
ImageHight는 픽셀로 표현된다.이미지 때문에 절대값이 필요함높이는 하향식 영상의 음수로 표현된다.

픽셀 배열(비트맵 데이터)

픽셀 배열은 32비트 DWORD의 블록으로 이미지 픽셀을 픽셀 단위로 기술한다.일반적으로 픽셀은 "상단 위로" 저장되며, 왼쪽 하단 모서리에서 시작하여 왼쪽에서 오른쪽으로 이동한 다음, 이미지 하단에서 맨 위까지 행별로 정렬된다.[5]BITMAPCOREHEADER를 사용하지 않으면 압축되지 않은 Windows 비트맵도 이미지 높이 값이 음수일 때 위에서 아래로 저장할 수 있다.

오리지널 OS/2 DIB에서는 색상 깊이의 4가지 법적 값만 픽셀(bpp)당 1, 4, 8, 24비트였다.[5]컨템포러리 DIB 헤더는 픽셀당 1, 2, 4, 8, 16, 24, 32비트(bpp)의 픽셀 형식을 허용한다.[18]GDI+도 픽셀당 64비트를 허용한다.[19]

행의 길이를 4바이트의 배수로 올리려면 행 끝에 패딩 바이트(필수 0은 아님)를 추가해야 한다.픽셀 배열이 메모리에 로드되면 각 행은 4의 배수인 메모리 주소에서 시작해야 한다.이 주소/오프셋 제한은 메모리에 로드된 픽셀 배열에만 필수적이다.파일 저장을 위해 각 행의 크기만 4바이트의 배수여야 하며, 파일 오프셋은 임의로 할 수 있다.[5]너비=1이 있는 24비트 비트맵은 행당 3바이트의 데이터(파란색, 녹색, 빨간색)와 1바이트의 패딩이 있는 반면, 너비=2는 6바이트의 데이터와 2바이트의 패딩을, 너비=3은 9바이트의 데이터와 3바이트의 패딩을, 너비=4는 12바이트의 데이터가 있고 패딩이 없다.

압축

  • 인덱스된 컬러 영상은 4비트 또는 8비트 RLE 또는 Huffman 1D 알고리즘으로 압축할 수 있다.
  • OS/2 비트맵코어헤더2 24bpp 영상은 24비트 RLE 알고리즘으로 압축할 수 있다.
  • 16bpp32bpp 영상은 항상 압축되지 않은 상태로 저장된다.
  • 원하는 경우 압축 없이 모든 색상의 영상을 저장할 수 있다는 점에 유의하십시오.

픽셀 형식

  • 픽셀당 1비트(1bpp) 형식은 두 가지 뚜렷한 색상(예: 검은색과 흰색)을 지원한다.픽셀 값은 각 비트에 저장되며, 첫 번째 바이트의 가장 중요한 비트에 첫 번째(가장 왼쪽) 픽셀이 저장된다.[5]각 비트는 2가지 색상으로 구성된 표의 색인이다.설정되지 않은 비트는 첫 번째 색상 테이블 항목을 가리키며, 설정된 비트는 마지막 (두 번째) 색상 테이블 항목을 가리킨다.
  • 픽셀당 2비트(2bpp) 형식은 4개의 고유 색상을 지원하며 1바이트당 4픽셀을 저장하며, 가장 왼쪽의 픽셀은 가장 중요한 두 개의 비트(Windows CE 전용:[20]각 픽셀 값은 최대 4가지 색상의 테이블로 2비트 인덱스가 된다.
  • 픽셀당 4비트(4bpp) 형식은 16개의 고유 색상을 지원하며 1바이트당 2픽셀을 저장하는데, 가장 왼쪽 픽셀이 더 유의미한 니블에 있다.[5]각 픽셀 값은 최대 16가지 색상의 테이블로 4비트 인덱스가 된다.
  • 픽셀당 8비트(8bpp) 형식은 256개의 고유 색상을 지원하며 1바이트당 1픽셀을 저장한다.각 바이트는 최대 256 색상의 표로 된 색인이다.
  • 픽셀당 16비트(16bpp) 형식은 65536개의 고유 색상을 지원하며, 2바이트 WORD당 1픽셀을 저장한다.각 WORD는 픽셀의 알파, 적색, 녹색 및 청색 샘플을 정의할 수 있다.
  • 24비트 픽셀(24bpp) 형식은 16,777,216개의 고유 색상을 지원하며 3바이트당 1픽셀 값을 저장한다.각 픽셀 값은 픽셀의 빨간색, 녹색 및 파란색 샘플(RGBAX 표기법에서 8.8.8.0.0)을 정의한다.구체적으로 청색, 녹색, 적색(표본당 8비트) 순이다.[5]
  • 픽셀당 32비트(32bpp) 형식은 4,294,967,296개의 고유 색상을 지원하며 4바이트 DWORD당 1픽셀을 저장한다.각 DWORD는 픽셀의 알파, 적색, 녹색 및 청색 샘플을 정의할 수 있다.

어떤 비트가 어떤 샘플을 정의하는지 모호함을 해결하기 위해 DIB 헤더는 특정 BITFieldS뿐만 아니라 특정 기본값을 제공하며, 이는 픽셀에 있는 특정 비트 그룹의 멤버쉽을 특정 채널에 정의하는 비트 마스크다.다음 다이어그램은 이러한 메커니즘을 정의한다.

Diag. 2 – The BITFIELDS mechanism for a 32-bit pixel depicted in RGBAX sample length notation
Diag. 2 – RGBAX 샘플 길이 표기법으로 표시된 32비트 픽셀에 대한 BITFELS 메커니즘

BITFELS 비트 마스크에 의해 정의된 샘플 필드는 연속적이고 오버랩되지 않아야 하지만 샘플 필드의 순서는 임의적이다.가장 보편적인 필드 순서는 다음과 같다.알파, 파란색, 녹색, 빨간색(MSB에서 LSB로).빨간색, 녹색 및 파란색 비트 마스크는 DIB 헤더의 압축 멤버가 BI_B로 설정된 경우에만 유효하다.ITFields알파 비트 마스크는 DIB 헤더에 있거나 DIB 헤더의 압축 멤버가 BI_ALAPAB로 설정된 경우 항상 유효하다.ITFELS[6](Windows CE만 해당).

Diag. 3 – The pixel format with an alpha channel for a 16-bit pixel (in RGBAX sample Length notation) actually generated by Adobe Photoshop[21]
Diag. 3 – Adobe Photoshop에서[21] 실제로 생성된 16비트 픽셀용 알파 채널(RGBAX 샘플 길이 표기법)의 픽셀 형식
All of the possible pixel formats in a DIB
DIB에서 가능한 모든 픽셀 형식

RGB 비디오 하위 유형

위에서 설명한 BITField 메커니즘은 수만 개의 서로 다른 픽셀 형식을 정의할 수 있지만, 실제로 사용되는 픽셀 형식은 몇 개에 불과하지만,[21] 모든 팔레팅된 형식 RGB8, RGB4 및 RGB1(위 표에 노란색으로 표시됨,dshow.hMEDIAUBTYPE 이름) 및:

압축되지 않은 RGB 비디오 하위 유형[22]
R.G.B.A.X RGB 하위 유형 R.G.B.A.X ARGB 하위 유형
8.8.8.0.8 RGB32 8.8.8.8.0 ARGB32
10.10.10.2.0 A2R10G10B10
8.8.8.0.0 RGB24 10.10.10.2.0 A2B10G10R10
5.6.5.0.0 RGB565 4.4.4.4.0 ARGB444
5.5.5.0.1 RGB555 5.5.5.1.0 ARGB1555
10 RGB 비트에[22] 대한 비트 필드
비트 필드 오프셋 비트A2R10G10B10 비트A2B10G10R10
빨간색 36시간 00 00 F0 3F LE: 3FF00000 2029 FF 03 00 00 LE: 000003FF 0 9
녹색 3AH 00 FC 0F 00 LE: 000FFC00 1019 00 FC 0F 00 LE: 000FFC00 1019
파랑 3에에 FF 03 00 00 LE: 000003FF 0 9 00 00 F0 3F LE: 3FF00000 2029
알파 42시간 00 00 00 C0 LE: C0000000 3031 00 00 00 C0 LE: C0000000 3031

버전 2.1.4 FFmpeg에서 지원되는 (자체 용어로) BMP 픽셀 형식은 bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, rgb4_byte, bgr4_byte, 회색, pal8 monob, 즉 bgra가 유일하게 지원되는 픽셀 형식이었다.[23]

24비트/픽셀 인코딩이 있는 2×2 픽셀 비트맵의 예 1

예 1

다음은 픽셀 형식 RGB24인 2×2 픽셀 24비트 비트맵(Windows DIB 헤더 BITMAPINFOHEADER)의 예다.

오프셋 크기 16진수 값 가치 설명
BMP 헤더
0h 2 42 4D "BM" ID 필드(42h, 4Dh)
2시간 4 46 00 00 00 70바이트(54+16) BMP 파일의 크기(54바이트 헤더 + 16바이트 데이터)
6시간 2 00 00 사용되지 않음 응용 프로그램별
8시간 2 00 00 사용되지 않음 응용 프로그램별
아. 4 36 00 00 00 54바이트(14+40) 픽셀 배열(비트맵 데이터)을 찾을 수 있는 오프셋
DIB 헤더
4 28 00 00 00 40바이트 DIB 헤더의 바이트 수(이 시점부터)
12시 4 02 00 00 00 2픽셀(좌우 순서) 비트맵 너비(픽셀)
16시 4 02 00 00 00 2픽셀(아래에서 맨 위 순서로) 비트맵의 높이(픽셀).아래쪽부터 위쪽까지의 픽셀 순서에 대해 양수.
1아 2 01 00 1면 사용 중인 색상 평면 수
1CH 2 18 00 24비트 픽셀당 비트 수
1에에 4 00 00 00 00 0 BI_RGB, 픽셀 배열 압축 사용 안 함
22시간 4 10 00 00 00 16바이트 원시 비트맵 데이터의 크기(패딩 포함)
26시간 4 13 0B 00 00 00 2835픽셀/미터 수평 이미지 해상도 인쇄,
72 DPI × 39.3701 인치/미터당 2834.6472의 생산량
2아 4 13 0B 00 00 00 2835픽셀/미터 수직
2에에에 4 00 00 00 00 0색 팔레트의 색상 수
32시간 4 00 00 00 00 0 중요한 색상 0은 모든 색이 중요하다는 것을 의미한다.
픽셀 배열 시작(비트맵 데이터)
36시간 3 00 00 FF 0 0 255 빨간색, 픽셀(0,1)
39시간 3 FF FF 255 255 255 흰색, 픽셀(1,1)
3CH 2 00 00 0 0 4바이트 정렬을 위한 패딩(0이 아닌 값일 수 있음)
3에에 3 FF 00 00 255 0 0 파란색, 픽셀(0,0)
41시간 3 00 FF 00 0 255 0 녹색, 픽셀(1,0)
44시간 2 00 00 0 0 4바이트 정렬을 위한 패딩(0이 아닌 값일 수 있음)
0,0: blue 0000FF FF0,1: green 00FF00 FF0,2: red FF00000 FF0,3: white FFFFFF FF1,0: blue 0000FF 7F, half transparent1,1: green 00FF00 7F, half transparent1,2: red FF0000 7F, half transparent1,3: white FFFFFF 7F, half transparent
About this image
32비트/픽셀 인코딩을 사용하는 4×2 픽셀 비트맵의 예 2

예 2

다음은 ARGB32 픽셀 형식의 알파 채널(Windows DIB 헤더 BITMAPV4HEADER)에서 불투명도 값을 갖는 4×2 픽셀의 32비트 비트맵의 예다.

오프셋 크기 16진수 값 가치 설명
BMP 헤더
0h 2 42 4D "BM" ID 필드(42h, 4Dh)
2시간 4 9A 00 00 00 00 00 00 154바이트(122+32) BMP 파일의 크기
6시간 2 00 00 사용되지 않음 응용 프로그램별
8시간 2 00 00 사용되지 않음 응용 프로그램별
아. 4 7A 00 00 00 00 00 00 122바이트(14개 이상) 픽셀 배열(비트맵 데이터)을 찾을 수 있는 오프셋
DIB 헤더
4 6C 00 00 00 00 00 108바이트 DIB 헤더의 바이트 수(이 시점부터)
12시 4 04 00 00 00 4픽셀(좌우 순서) 비트맵 너비(픽셀)
16시 4 02 00 00 00 2픽셀(아래에서 맨 위 순서로) 비트맵의 높이(픽셀).
1아 2 01 00 1면 사용 중인 색상 평면 수
1CH 2 20 00 32비트 픽셀당 비트 수
1에에 4 03 00 00 00 3 BI_BITFELS, 픽셀 배열 압축 사용 안 함
22시간 4 20 00 00 00 32바이트 원시 비트맵 데이터의 크기(패딩 포함)
26시간 4 13 0B 00 00 00 2835픽셀/미터 수평 이미지 해상도 인쇄,
72 DPI × 39.3701 인치/미터당 2834.6472의 생산량
2아 4 13 0B 00 00 00 2835픽셀/미터 수직
2에에에 4 00 00 00 00 0색 팔레트의 색상 수
32시간 4 00 00 00 00 0 중요한 색상 0은 모든 색이 중요하다는 것을 의미한다.
36시간 4 00 00 00 FF 00 00FF0000 빅엔디안 빨간색 채널 비트 마스크(BI_B 때문에 유효함)ITFELS가 지정됨)
3AH 4 00 FF 00 00 00 0000FF00 빅엔디안 녹색 채널 비트 마스크(BI_B 때문에 유효함)ITFELS가 지정됨)
3에에 4 FF 00 00 00 00 000000FF 빅엔디안 파란색 채널 비트 마스크(BI_B 때문에 유효함)ITFELS가 지정됨)
42시간 4 00 00 00 00 FF 빅엔디안의 FF000000 알파 채널 비트 마스크
46시간 4 20 6E 69 57 리틀엔디안 "Win " LCS_Windows_COLOR_SPACE
4AH 24시간 24시간* 00시...00 CIEXYZTRIPLE 색상 공간 끝점 LCS에 사용되지 않음 "Win " 또는 "sRGB"
6에에 4 00 00 00 00 0 적감마 LCS에 사용되지 않음 "Win " 또는 "sRGB"
72시간 4 00 00 00 00 0 그린 감마 LCS에 사용되지 않음 "Win " 또는 "sRGB"
76시간 4 00 00 00 00 0 청색 감마 LCS에 사용되지 않음 "Win " 또는 "sRGB"
픽셀 배열 시작(비트맵 데이터)
7아 4 FF 00 00 7F 255 0 0 127 파란색(Alpha:127), 픽셀(1.0)
세븐에 4 00 FF 00 7F 0 255 0 127 녹색(Alpha:127), 픽셀(1,1)
82시간 4 00 00 FF 7F 0 0 255 127 빨간색(Alpha:127), 픽셀(1,2)
86시간 4 FF FF 7F 255 255 255 127 흰색(Alpha:127), 픽셀(1,3)
8Ah 4 FF 00 00 FF 255 0 0 255 파란색(Alpha: 255), 픽셀(0,0)
8에에 4 00 FF 00 FF 0 255 0 255 녹색(Alpha: 255), 픽셀(0,1)
92시간 4 00 00 00 FF FF 0 0 255 255 빨간색(Alpha: 255), 픽셀(0,2)
96시간 4 FF FF FF 255 255 255 255 흰색(Alpha: 255), 픽셀(0,3)

비트맵 데이터는 이미지의 왼쪽 하단 모서리에서 시작한다는 점에 유의하십시오.

BMP 형식 사용

BMP 파일 포맷의 단순성, 그리고 Windows 등지에서 널리 친숙하다는 점, 그리고 이 포맷이 비교적 잘 문서화되어 있고 개방형 포맷을 가지고 있다는 사실 등은 BMP를 많은 운영체제의 이미지 처리 프로그램이 읽고 쓸 수 있는 매우 흔한 포맷으로 만든다.ICO 및 CUR 파일에는 BITMAPINFOHEADER로 시작하는 비트맵이 포함되어 있다.

예를 들어 마이크로소프트 윈도우즈 및 OS/2 플랫폼의 GDI 하위 시스템에서는 일반적으로 파일 확장명으로 이름이 붙여진 윈도우즈OS/2 비트맵을 사용하는 구형 그래픽 사용자 인터페이스가 대부분 비트맵을 사용하였다.[24].BMP.[25]

대부분의 BMP 파일은 압축(또는 팔레트화된 이미지에 일반적으로 낮은 비율의 런 길이 인코딩)이 부족하기 때문에 상대적으로 파일 크기가 큰 반면, 많은 BMP 파일은 중복 데이터를 포함하기 때문에 ZIP와 같은 무손실 데이터 압축 알고리즘으로 상당히 압축될 수 있다.RAR과 같은 일부 형식은 그러한 데이터의 효율적인 압축을 특별히 목표로 하는 루틴을 포함하기도 한다.

관련 형식

X 윈도 시스템은 흑백 영상의 경우 XBM 형식을, 컬러 영상의 경우 XPM(픽셀맵)을 사용한다.다른 정보 없이 원시 데이터를 저장하는 다양한 "원시" 형식도 있다.PPM(Portable Pixmap)과 Truevision TGA 형식도 존재하지만 덜 자주 사용되거나 특별한 목적으로만 TGA가 투명성 정보를 포함할 수 있다.

참조

  1. ^ "IANA Considerations". Windows Image Media Types. sec. 5. doi:10.17487/RFC7903. RFC 7903.
  2. ^ a b c James D. Murray; William vanRyper (April 1996). Encyclopedia of Graphics File Formats (Second ed.). O'Reilly. bmp. ISBN 1-56592-161-5. Retrieved 2014-03-07.
  3. ^ a b c d e f g h James D. Murray; William vanRyper (April 1996). Encyclopedia of Graphics File Formats (Second ed.). O'Reilly. os2bmp. ISBN 1-56592-161-5. Retrieved 2014-03-07.
  4. ^ a b "[MS-WMF]: Windows Metafile Format". MSDN. 2014-02-13. Retrieved 2014-03-12.
  5. ^ a b c d e f g h i j "DIBs and Their Uses". Microsoft Help and Support. Retrieved 2015-05-14.
  6. ^ a b c MSDN - 비트맵INFO헤더(Windows CE 5.0): BI_ALAPABITFELS in biCompression 멤버
  7. ^ a b c MSDN 비트맵 헤더 유형
  8. ^ a b c MSDN 비트맵INFO 구조
  9. ^ 펑위안 - Windows 그래픽 프로그래밍:Win32 GDI 및 DirectDraw: 포장된 장치 독립 비트맵(CreateDIBPattern Brush, CreateDIBPatternBrusPt, FindResource, LoadResource, LockResource)
  10. ^ Summers, Jason (2015-10-30). "pal8os2v2-16.bmp". Retrieved 2016-07-06.
  11. ^ Summers, Jason (2015-10-30). "BMP Suite". Retrieved 2016-07-06.
  12. ^ Cox, Chris (2010-11-15). "Invalid BMP Format with Alpha channel". Photoshop Windows forum. Adobe. Archived from the original on 2015-01-27. Retrieved 2016-05-22.
  13. ^ "Microsoft Windows Bitmap: Summary from the Encyclopedia of Graphics File Formats".
  14. ^ a b "JPEG and PNG Extensions for Specific Bitmap Functions and Structures".
  15. ^ MSDN – 비트맵V4헤더:멤버 bV4AlphaMask
  16. ^ MSDN – RGBQUAD: rgbReserved 멤버
  17. ^ biClrrUsed MSDN 비트맵INFOHEADER의 참고 사항 참조
  18. ^ MSDN - 비트맵인포헤더:멤버 biBitCount
  19. ^ "Types of Bitmaps". MSDN. 2012-06-03. Retrieved 2014-03-16.
  20. ^ MSDN: 윈도 CE - 비트맵인포헤더 구조
  21. ^ a b Adobe Photoshop: 웨이백 머신보관된 BMP 형식 2011-09-22
  22. ^ a b "Uncompressed RGB Video Subtypes". dshow.h. MSDN. Retrieved 2014-03-11.
  23. ^ "Image Formats". FFmpeg General Documentation. 2014. Retrieved 2014-02-23.
  24. ^ Julian Smart; Stefan Csomor & Kevin Hock (2006). Cross-Platform GUI Programming with Wxwidgets. Prentice Hall. ISBN 0-13-147381-6.
  25. ^ "Bitmap Image File (BMP), Version 5". Digital Preservation. Library of Congress. 2014-01-08. Retrieved 2014-03-11.

외부 링크