맨위로가기

BMP 파일 포맷

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

BMP 파일 포맷은 비트맵 이미지 파일을 저장하기 위한 파일 형식으로, 파일 헤더, DIB 헤더, 색상 팔레트, 비트맵 데이터로 구성된다. 파일 구조는 비트맵 파일 헤더와 DIB 헤더를 포함하며, 색상 팔레트와 픽셀 배열을 선택적으로 포함한다. BMP 파일은 다양한 픽셀 형식을 지원하며, 무압축 또는 RLE 압축 방식을 사용할 수 있다. 윈도우와 OS/2 플랫폼에서 기본 이미지 형식으로 사용되며, 단순하고 개방적인 특성으로 인해 다양한 운영 체제에서 널리 지원된다.

더 읽어볼만한 페이지

  • 마이크로소프트 윈도우 멀티미디어 기술 - 윈도우 디스플레이 드라이버 모델
    윈도우 비스타부터 도입된 윈도우 디스플레이 드라이버 모델(WDDM)은 성능 향상, 안정성, 새로운 기술 지원을 목표로 개발된 디스플레이 드라이버 아키텍처로, 가상화된 비디오 메모리, GPU 스케줄링, 프로세스 간 Direct3D 표면 공유, 향상된 오류 허용성 등의 특징을 가지며 데스크톱 윈도우 관리자(DWM)를 통한 합성 데스크톱 환경 구현에 필수적이다.
  • 마이크로소프트 윈도우 멀티미디어 기술 - 윈도우 미디어 플레이어
    윈도우 미디어 플레이어는 마이크로소프트에서 개발하여 윈도우 운영 체제에서 오디오, 비디오, 이미지 파일을 재생하는 데 사용되는 미디어 플레이어 응용 프로그램으로, 초기 버전은 '미디어 플레이어'라는 이름으로 출시되어 다양한 기능 추가 및 플랫폼 확장을 거쳤으나 현재는 대부분 지원이 중단되었고, 유럽 연합 경쟁법 위반 사건으로 인해 없는 버전도 출시되었다.
  • 그래픽 파일 포맷 - JPEG
    JPEG은 정지 화상의 디지털 압축 및 코딩을 위한 국제 표준이자 이를 만든 위원회의 이름으로, 1992년 최초 표준 발표 이후 웹 환경에서 널리 사용되는 이미지 형식이 되었다.
  • 그래픽 파일 포맷 - FITS
    FITS는 천문학 데이터를 저장하고 교환하기 위해 설계된 디지털 파일 형식으로, 이미지와 표 형식의 데이터를 지원하며, 국제천문연맹에서 관리한다.
BMP 파일 포맷 - [IT 관련 정보]에 관한 문서
파일 정보
Windows Bitmap 로고
Windows Bitmap 로고
파일 확장자.bmp, .dib
마임 유형image/bmp, image/x-bmp
유형 코드'BMP ', 'BMPf', 'BMPp'
유니폼 타입com.microsoft.bmp
장르래스터 그래픽스
공개 여부WMF용 OSP
개발사마이크로소프트
상세 정보
종류비트맵이미지
자유 여부

2. 파일 구조

BMP 파일은 일반적으로 다음과 같은 구조를 가진다.

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



그림 1은 비트맵 이미지 파일의 구조를 보여준다. 마이크로소프트는 다양한 색상 깊이를 가진 컬러 비트맵의 특정 표현 방식을 정의하여, 장치와 응용 프로그램 간에 비트맵 교환을 용이하게 했다. 이를 장치 독립 비트맵(DIB)이라고 하며, 해당 파일 형식은 DIB 파일 형식 또는 BMP 이미지 파일 형식이라고 불린다.[4]

마이크로소프트 지원에 따르면, 장치 독립 비트맵(DIB)은 다양한 색상 해상도에서 비트맵을 정의하는 데 사용되며, 비트맵을 한 장치에서 다른 장치로 이동할 수 있도록 하는 것이 주요 목적이다.[4] DIB는 일반적으로 메타 파일, BMP 파일, 클립보드 등에서 전송된다.[4]

BMP 파일은 고정 크기 구조(헤더)와 가변 크기 구조로 구성되며, 오랜 기간 발전하면서 여러 버전의 구조가 파일에 나타날 수 있다.

비트맵 파일은 다음 구조로 구성된다.

구조 이름선택 사항크기목적비고
비트맵 파일 헤더아니요14바이트비트맵 이미지 파일에 대한 일반 정보를 저장파일 로드 후에는 불필요
DIB 헤더아니요고정 크기
(7가지 다른 버전 존재)
비트맵 이미지에 대한 자세한 정보를 저장하고 픽셀 형식을 정의비트맵 파일 헤더 바로 뒤에 위치
추가 비트 마스크3 또는 4 DWORDs[14]
(12 또는 16바이트)
픽셀 형식을 정의DIB 헤더가 BITMAPINFOHEADER이고 압축 방법이 BI_BITFIELDS 또는 BI_ALPHABITFIELDS인 경우에만 존재
색상표반 선택 사항가변 크기비트맵 이미지 데이터(픽셀 배열)에 사용되는 색상을 정의색 심도가 8비트 이하인 경우 필수
간격1가변 크기구조 정렬비트맵 파일 헤더의 픽셀 배열에 대한 파일 오프셋의 인공물
픽셀 배열아니요가변 크기픽셀의 실제 값을 정의픽셀 형식은 DIB 헤더 또는 추가 비트 마스크에 의해 정의. 각 행은 4바이트의 배수로 채워짐
간격2가변 크기구조 정렬DIB 헤더의 ICC 프로파일 데이터 오프셋 필드의 인공물
ICC 색상 프로파일가변 크기색상 관리를 위한 색상 프로파일을 정의색상 프로파일이 포함된 외부 파일의 경로를 포함 가능. "비 압축 DIB"로 메모리에 로드될 때 색상표와 간격1 사이에 위치[5]



메모리에 로드된 비트맵 이미지는 DIB 데이터 구조가 되며, 이는 Windows GDI API의 중요한 구성 요소이다. 메모리 내 DIB 데이터 구조는 BMP 파일 형식과 거의 동일하지만, 파일 헤더를 포함하지 않고 DIB 헤더로 시작한다.

BMP 파일 형식의 구조

2. 1. 파일 헤더

BMP 파일 형식에서 파일 헤더는 파일의 맨 앞에 위치하며, 파일에 대한 기본적인 정보를 담고 있다. 이 헤더는 14바이트 크기로 고정되어 있으며, 다음과 같은 정보를 포함한다.

오프셋크기저장되는 정보값·비고
0x00002바이트파일 타입항상 BM (0x42 0x4D) (매직 넘버)
0x00024바이트파일 크기비트맵 파일의 전체 크기를 바이트 단위로 저장한다.
0x00062바이트예약 영역 1항상 0이다.
0x0008예약 영역 2
0x000a4바이트오프셋파일의 시작 부분에서 비트맵 데이터(픽셀 데이터)가 시작되는 위치까지의 거리(오프셋)를 바이트 단위로 나타낸다.



파일 헤더의 첫 2바이트는 항상 'BM'이라는 매직 넘버 (0x42 0x4D)로, 해당 파일이 BMP 파일임을 나타낸다. 예약 영역은 일반적으로 사용되지 않으며, 이미지를 생성하는 프로그램에 따라 다른 값을 가질 수도 있지만 보통은 0으로 설정되어 있다. 파일 크기와 오프셋 정보는 리틀 엔디안 형식으로 저장된다.

파일 헤더는 크게 BITMAPFILEHEADERBITMAPFILEHEADER2 두 가지 주요 버전으로 나뉜다.

2. 1. 1. BITMAPFILEHEADER

BITMAPFILEHEADER는 14바이트 크기의 비트맵 파일 헤더이다. 파일 시작 부분에 위치하며, 파일을 식별하고 관련 정보를 제공하는 데 사용된다. 일반적인 응용 프로그램은 이 헤더를 먼저 읽어 파일이 BMP 파일인지, 손상되지는 않았는지 확인한다.

{| class="wikitable"

|+ BITMAPFILEHEADER 구조[14]

! 16진수 오프셋 !! 10진수 오프셋 !! 크기 !! 용도

|-

| 00 || 0 || 2 바이트 || BMP 및 DIB 파일을 식별하는 데 사용되는 헤더 필드는 16진법으로 `0x42 0x4D`이며, ASCII에서 `BM`과 같다. 가능한 값은 다음과 같다.

BMWindows 3.1x, 95, NT, ... 등
BAOS/2 구조 비트맵 배열
CIOS/2 구조 색상 아이콘
CPOS/2 const 색상 포인터
ICOS/2 구조 아이콘
PTOS/2 포인터



|-

| 02 || 2 || 4 바이트 || BMP 파일의 크기(바이트)

|-

| 06 || 6 || 2 바이트 || 예약됨; 실제 값은 이미지를 생성하는 응용 프로그램에 따라 달라지며, 수동으로 생성된 경우 0일 수 있다.

|-

| 08 || 8 || 2 바이트 || 예약됨; 실제 값은 이미지를 생성하는 응용 프로그램에 따라 달라지며, 수동으로 생성된 경우 0일 수 있다.

|-

| 0A || 10 || 4 바이트 || 비트맵 이미지 데이터(픽셀 배열)를 찾을 수 있는 바이트의 오프셋, 즉 시작 주소이다.

|}

정수 값은 모두 리틀 엔디안 형식(최하위 바이트 우선)으로 저장된다.

2. 1. 2. BITMAPFILEHEADER2

OS/2 2.x에서 사용된 파일 헤더이다. BITMAPFILEHEADER를 확장한 것이지만 크기는 같다.

오프셋크기저장하는 정보값・비고
0x00002 바이트파일 타입BM (0x42, 0x4d) (비트맵)
0x00024 바이트헤더 크기파일 헤더와 정보 헤더의 총 크기를 바이트 단위로 저장한다.
0x0006
0x000a4 바이트오프셋파일 헤더의 시작 주소부터 비트맵 데이터의 시작 주소까지의 오프셋. 단위는 바이트.


  • 모노크롬 아이콘, 모노크롬 포인터는 1bit 모노크롬 이미지만 지원한다.
  • 컬러 아이콘, 컬러 포인터는 1 파일 내에 투명 위치를 나타내는 1bit 모노크롬 이미지와 컬러 정보를 나타내는 이미지를 함께 가지는 특수한 파일 구조를 하고 있다.

2. 2. 정보 헤더

윈도우 2.0 이상
OS/2 1.x[11]64OS/2 2하프토닝 추가. RLE 및 허프만 1D 압축 추가.1640윈도우 NT, 3.1x 이상[2]비트맵 너비 및 높이를 4바이트로 확장. 16 bpp 및 32 bpp 형식 추가. RLE 압축 추가.52문서화되지 않음RGB 비트 마스크 추가.어도비 포토샵56알파 채널 비트 마스크 추가.어도비 포토샵108윈도우 NT 4.0, 95 이상색상 공간 유형 및 감마 보정 추가.124Windows NT 5.0, 98 이상ICC 색상 프로파일 추가.GIMP


2. 2. 1. BITMAPCOREHEADER

OS/2 V1 헤더는 OS/2 비트맵에 사용되는 정보 헤더로, 크기는 12바이트이다. 'core 헤더'라고도 불린다.[11]

오프셋크기저장하는 정보값 · 비고
0x000e4바이트헤더 크기12
0x00122바이트비트맵의 가로 폭단위는 픽셀
0x0014비트맵의 세로 폭
0x0016플레인 수항상 1
0x00181 픽셀당 비트 수1, 4, 8, 24



OS/2 V1 비트맵은 압축할 수 없으며 한 화소에 16/32 비트의 정보를 담을 수 없다.[11] 모든 값은 부호 없는 정수이다.

Windows 2.x BITMAPCOREHEADER는 이미지 너비 및 높이 필드가 부호 없는 정수가 아닌 부호 있는 정수라는 점에서 OS/2 1.x BITMAPCOREHEADER와 다르다.[12]

2. 2. 2. BITMAPINFOHEADER

윈도우 비트맵에서 사용되는 40바이트 크기의 정보 헤더로, 'info 헤더'라고도 불린다. 가장 널리 사용되는 형식이다. 호환성을 위해 대부분의 응용 프로그램은 파일을 저장할 때 오래된 DIB 헤더를 사용한다. OS/2가 물러나자, 현재 일반적으로 쓰이는 포맷은 V3 헤더가 되었다.

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

식별자압축 방식비고
0BI_RGB없음가장 일반적
1BI_RLE8RLE 8비트/픽셀8비트/픽셀 비트맵에만 사용할 수 있다.
2BI_RLE4RLE 4비트/픽셀4비트/픽셀 비트맵에만 사용할 수 있다.
3BI_BITFIELDS비트 필드16, 32비트/픽셀 비트맵에만 사용할 수 있다.
4BI_JPEGJPEG비트맵은 JPEG 이미지를 포함한다.
5BI_PNGPNG비트맵은 PNG 이미지를 포함한다.
6BI_ALPHABITFIELDSRGBA 비트 필드 마스크Windows CE 5.0만 .NET 4.0 이상
11BI_CMYK없음Windows 메타파일 CMYK만[3]
12BI_CMYKRLE8RLE-8Windows 메타파일 CMYK만
13BI_CMYKRLE4RLE-4Windows 메타파일 CMYK만



info 헤더라고 불리는, 윈도우 비트맵에서 사용되는 정보 헤더는 다음과 같다.

오프셋크기저장하는 정보값・비고
0x000e4바이트헤더 크기40
0x0012비트맵의 가로 폭단위는 픽셀
0x0016비트맵의 세로 폭단위는 픽셀. 값이 음수인 경우는 톱다운 이미지가 된다
0x001a2바이트플레인 수항상 1
0x001c1픽셀당 비트0, 1, 4, 8, 16, 24, 32
0x001e4바이트압축 형식0, 1, 2, 3, 4, 5 [13]
0x0022이미지 데이터 크기단위는 바이트
0x0026수평 방향의 해상도단위는 픽셀/m
0x002a수직 방향의 해상도
0x002e사용하는 색상 수비트맵에서 실제로 사용하는 컬러 팔레트 내의 컬러 인덱스 수.
0x0032중요한 색상 수비트맵을 표시하기 위해 필요한 컬러 인덱스 수.


2. 2. 3. BITMAPINFOHEADER2

OS/2 V2 이후에 대응하는 정보 헤더로, 크기는 가변적이며 최대 64바이트이다.

오프셋크기저장하는 정보값·비고
0x000e4 바이트헤더 크기16 ~ 64 (가변 길이)
0x0012비트맵의 가로 폭단위는 픽셀
0x0016비트맵의 세로 폭
0x001a2바이트플레인 수항상 1
0x001c1 픽셀당 비트 수1, 4, 8, 24
0x001e4바이트압축 형식0 (비압축), 1 (8비트 RLE), 2 (4비트 RLE), 3 (1비트 허프만 코딩 압축), 4 (24비트 RLE)
0x0022이미지 데이터 크기단위는 바이트. 비압축의 경우 0을 넣어도 됨
0x0026수평 방향의 해상도단위는 "해상도의 단위"로 지정됨
0x002a수직 방향의 해상도
0x002e사용 색상 수비트맵에서 실제로 사용하는 컬러 팔레트 내의 컬러 인덱스 수.
0x0032중요한 색상 수비트맵을 표시하는 데 필요한 컬러 인덱스 수.
0x00362바이트해상도 단위0 (픽셀/m)
0x0038예약 영역항상 0
0x003a기록 방식0 (바텀 업)
0x003c하프톤 방식0 (하프톤 없음), 1 (오차 확산), 2 (PANDA), 3 (Super Circle)
0x003e4바이트하프톤 시의 매개변수 1
0x0042하프톤 시의 매개변수 2오차 확산의 경우 무시됨
0x0046부호화 방식0 (RGB2, RGBQUAD에 해당)
0x004a식별자애플리케이션이 독자적으로 사용해도 되는 영역

[11]

2. 2. 4. BITMAPV3INFOHEADER

어도비 포토샵(Adobe Photoshop)에서 사용되던 정보 헤더이다. info 헤더에 RGB와 α(알파) 성분의 컬러 마스크를 통합한 56바이트 헤더로, 편의상 '''V3 헤더'''라고 불린다.[31] info 헤더에 RGB 성분의 컬러 마스크를 통합한 52바이트의 정보 헤더도 존재하며, 이쪽은 편의상 '''V2 헤더'''라고 불린다.

2. 2. 5. BITMAPV4HEADER

Windows영어 95, Windows NT영어 4.0부터 지원하는 정보 헤더이다. V4 헤더라고 불린다.

오프셋크기저장하는 정보값・비고
0x000e4 바이트헤더 크기108
0x00124 바이트비트맵의 가로 폭info 헤더와 동일
0x00164 바이트비트맵의 세로 폭
0x001a2 바이트플레인 수
0x001c2 바이트1 픽셀당 비트 수
0x001e4 바이트압축 형식
0x00224 바이트이미지 데이터 크기
0x00264 바이트수평 방향의 해상도
0x002a4 바이트수직 방향의 해상도
0x002e4 바이트사용 색상 수
0x00324 바이트중요한 색상 수
0x00364 바이트빨강 성분 컬러 마스크
0x003a4 바이트녹색 성분 컬러 마스크
0x003e4 바이트파랑 성분 컬러 마스크
0x00424 바이트α 성분 컬러 마스크
0x00464 바이트색 공간0 (헤더 내에서 정의)
0x004a36 바이트CIEXYZTRIPLE 구조체색 공간이 0인 경우에만 유효
0x006e4 바이트빨강 성분 감마 값색 공간이 0인 경우에만 유효
16.16 고정 소수점 수
0x00724 바이트녹색 성분 감마 값
0x00764 바이트파랑 성분 감마 값


2. 2. 6. BITMAPV5HEADER

윈도우 98, 윈도우 2000부터 지원하는 정보 헤더로 V5 헤더라고 불린다.[11]

오프셋크기저장 정보값 · 비고
0x000e4바이트헤더 크기124
0x0012비트맵의 가로 폭info 헤더와 동일
0x0016비트맵의 세로 폭
0x001a2바이트플레인 수
0x001c1픽셀당 비트 수
0x001e4바이트압축 형식
0x0022이미지 데이터 크기
0x0026수평 방향의 해상도
0x002a수직 방향의 해상도
0x002e사용 색상 수
0x0032중요한 색상 수
0x0036적색 성분의 컬러 마스크V4 헤더와 동일
0x003a녹색 성분의 컬러 마스크
0x003e청색 성분의 컬러 마스크
0x0042α 성분의 컬러 마스크
0x0046색 공간0(헤더 내에서 정의), 0x73524742(sRGB), 0x57696e20(Win ), 0x4c494e4b(LINK), 0x4d424544(MBED)
0x004a36바이트CIEXYZTRIPLE 구조체V4 헤더와 동일
0x006e4바이트적색 성분의 감마 값
0x0072녹색 성분의 감마 값
0x0076청색 성분의 감마 값
0x007a렌더링 의도1, 2, 4, 8
0x007e프로파일 데이터의 오프셋정보 헤더의 시작 주소부터 프로파일 데이터의 시작 주소까지의 오프셋. 단위는 바이트
0x0082프로파일 데이터의 크기단위는 바이트
0x0086예약 영역항상 0


2. 3. 컬러 마스크

컬러 마스크는 비트 필드 형식이 사용된 비트맵에서 각 색상 성분을 추출하는 데 사용되는 데이터이다. 빨강, 녹색, 파랑 성분 순으로 작성되며, 각각 4바이트씩 총 12바이트이다. Windows CE에서 압축 형식에 "알파 채널 포함 비트 필드"를 사용한 경우에는 이 뒤에 α 성분의 컬러 마스크가 추가되어 총 16바이트가 된다.

컬러 마스크 블록은 정보 헤더가 INFO 헤더이고 비트 필드 형식이 사용된 경우에 반드시 존재한다. V4, V5 헤더의 경우에는 헤더 내에 값이 저장되므로 이 블록을 배치할 필요가 없다.

1픽셀당 비트 수와 컬러 마스크의 조합이 다음과 같은 경우에는 압축 형식을 비압축으로 설정하고 컬러 마스크 블록을 생략할 수 있다.

컬러 마스크16비트32비트
빨강 성분0x00007C000x00FF0000
녹색 성분0x000003E00x0000FF00
파랑 성분0x0000001F0x000000FF
α 성분0x000000000x00000000


2. 4. 색상 팔레트

색상 팔레트는 인덱스 색상 비트맵에서 사용되는 색상을 정의하는 데 사용된다. 인덱싱된 색상 이미지의 각 픽셀은 색상 팔레트의 인덱스(1, 4 또는 8비트)로 표현되며, 이 인덱스는 해당 픽셀의 색상을 나타낸다.

색상 팔레트의 각 항목은 일반적으로 파란색, 녹색, 빨간색, 0x00 순서로 4바이트를 차지하며, ARGB32 형식으로 지정된다. OS/2 BITMAPCOREHEADER영어에서 사용되는 색상 테이블은 항목당 3바이트의 RGB24 형식을 사용한다.[11][4] 16비트 픽셀당(16bpp) 형식 이상인 경우, 색상 테이블은 일반적으로 사용되지 않지만, 색상 표시 기능이 제한된 장치에서 최적화를 위해 사용될 색상 목록을 저장하기 위해 존재할 수 있다.[17] 팔레트의 항목 수는 2''n'' (여기서 n은 픽셀당 비트 수)이거나 헤더에 지정된 더 작은 수이다.[11][4]

2. 4. 1. RGBTRIPLE

RGBTRIPLE영어은 1색을 3바이트로 표기하는 형식으로, core 헤더인 경우에만 사용된다.[11][4]

바이트 수정보값・비고
1 바이트파랑0~255
녹색
빨강



분류:컴퓨터 파일 포맷

2. 4. 2. RGBQUAD

RGBQUAD영어는 1색을 4바이트로 표현하는 형식으로, OS/2 비트맵에서의 RGB2영어도 여기에 해당한다.[11][4] 색상 테이블의 각 항목은 일반적으로 파란색, 녹색, 빨간색, 0x00 순서로 4바이트를 차지하며, ARGB32 형식으로 지정된다.

바이트 수정보값 · 비고
1바이트파랑0-255
녹색
빨강
예약 영역



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

2. 5. 비트맵 데이터

비트맵 데이터는 실제 이미지의 픽셀 정보를 담고 있으며, 각 픽셀은 색상 팔레트의 인덱스 또는 RGB 값으로 표현된다. 픽셀 데이터는 일반적으로 이미지의 왼쪽 아래에서 시작하여 오른쪽 위 방향으로 저장된다.[4] 그러나 이미지 높이가 음수인 경우에는 위에서 아래 방향으로 저장될 수도 있다.

각 픽셀을 나타내는 비트는 행(스트라이드 또는 스캔 라인이라고도 함)으로 묶인다.[18] 각 행의 크기는 4바이트(32비트 DWORD)의 배수가 되도록 패딩 바이트(0x00)가 추가되어 조정된다.[18]

픽셀 한 행을 저장하는 데 필요한 바이트 수(RowSize)는 다음 공식을 사용하여 계산할 수 있다.

\text{RowSize} = \left\lceil\frac { \text{BitsPerPixel} \cdot \text{ImageWidth}}{32}\right\rceil \cdot 4 = \left\lfloor\frac { \text{BitsPerPixel} \cdot \text{ImageWidth}+31}{32}\right\rfloor \cdot 4,

높이가 1보다 큰 이미지의 경우, 여러 개의 패딩된 행이 연속적으로 저장되어 픽셀 배열을 형성한다. 픽셀 배열을 저장하는 데 필요한 총 바이트 수(PixelArraySize)는 다음 공식을 사용하여 계산할 수 있다.

\text{PixelArraySize} = \text{RowSize} \cdot |\text{ImageHeight}|

  • `ImageHeight`: 이미지 높이 (픽셀 단위, 위에서 아래로 내려가는 이미지의 경우 음수)


픽셀 배열은 이미지를 픽셀 단위로 설명하는 32비트 DWORD의 블록이다. 픽셀은 일반적으로 "하단에서 위로" 저장되는데, 이는 이미지의 왼쪽 하단 모서리에서 시작하여 왼쪽에서 오른쪽으로, 그리고 행별로 아래에서 위로 이동하는 방식이다.[4] 압축되지 않은 Windows 비트맵은 이미지 높이 값이 음수일 때 위에서 아래로 저장될 수도 있다. (가 사용되지 않는 한)

원래 OS/2 DIB에서 색상 깊이의 유효한 값은 픽셀당 1, 4, 8, 24비트(bpp)였다.[4] 현대 DIB 헤더는 픽셀당 1, 2, 4, 8, 16, 24 및 32비트(bpp)의 픽셀 형식을 허용한다.[19] GDI+는 픽셀당 64비트도 허용한다.[20]
예시:2x2 픽셀, 24비트 비트맵 (Windows DIB 헤더 ), 픽셀 형식 RGB24의 예:

오프셋크기16진수 값설명
픽셀 배열 시작 (비트맵 데이터)
36h300 00 FF0 0 255빨강, 픽셀 (x=0, y=1)
39h3FF FF FF255 255 255흰색, 픽셀 (x=1, y=1)
3Ch200 000 04 바이트 정렬을 위한 패딩 (0이 아닌 값일 수 있음)
3Eh3FF 00 00255 0 0파랑, 픽셀 (x=0, y=0)
41h300 FF 000 255 0녹색, 픽셀 (x=1, y=0)
44h200 000 04 바이트 정렬을 위한 패딩 (0이 아닌 값일 수 있음)



4x2 픽셀, 알파 채널에 불투명도 값을 가진 32비트 비트맵 (Windows DIB 헤더 ), 픽셀 형식 ARGB32의 예:

OffsetSizeHex 값설명
픽셀 배열 시작 (비트맵 데이터)
7Ah4FF 00 00 7F255 0 0 127파란색 (알파: 127), 픽셀 (x=0, y=1)
7Eh400 FF 00 7F0 255 0 127녹색 (알파: 127), 픽셀 (x=1, y=1)
82h400 00 FF 7F0 0 255 127빨간색 (알파: 127), 픽셀 (x=2, y=1)
86h4FF FF FF 7F255 255 255 127흰색 (알파: 127), 픽셀 (x=3, y=1)
8Ah4FF 00 00 FF255 0 0 255파란색 (알파: 255), 픽셀 (x=0, y=0)
8Eh400 FF 00 FF0 255 0 255녹색 (알파: 255), 픽셀 (x=1, y=0)
92h400 00 FF FF0 0 255 255빨간색 (알파: 255), 픽셀 (x=2, y=0)
96h4FF FF FF FF255 255 255 255흰색 (알파: 255), 픽셀 (x=3, y=0)


3. 압축 방식

BMP 파일은 무압축이거나 RLE 방식으로 압축될 수 있다. RLE 압축은 반복되는 픽셀 값을 효과적으로 줄여 파일 크기를 줄일 수 있다. 윈도우에서는 BI_RGB(무압축), BI_RLE8(8비트 RLE), BI_RLE4(4비트 RLE), BI_BITFIELDS, BI_JPEG, BI_PNG 등의 압축 방식을 지원한다.[4]

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

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



인덱스 색상 이미지는 4비트 또는 8비트 RLE 알고리즘으로 압축될 수 있다. 16bpp 및 32bpp 이미지는 '''항상 압축되지 않은 상태로 저장된다.''' 모든 색 심도의 이미지는 원할 경우 압축 없이 저장될 수 있다.

4. 픽셀 형식

BMP 파일 형식은 픽셀 데이터를 다양한 방식으로 저장할 수 있으며, 이를 픽셀 형식이라고 한다. 각 픽셀 형식은 픽셀당 비트 수(bpp, bits per pixel)로 표현된다. 픽셀당 비트 수가 높을수록 더 많은 색상을 표현할 수 있다.


  • 1bpp: 픽셀당 1비트를 사용하며, 2가지 색상(예: 검정, 흰색)을 표현한다. 각 비트는 색상 테이블의 인덱스를 가리킨다.
  • 2bpp: 픽셀당 2비트를 사용하며, 4가지 색상을 표현한다. 1바이트에 4개의 픽셀이 저장된다.
  • 4bpp: 픽셀당 4비트를 사용하며, 16가지 색상을 표현한다. 1바이트에 2개의 픽셀이 저장된다.
  • 8bpp: 픽셀당 8비트를 사용하며, 256가지 색상을 표현한다. 1바이트에 1개의 픽셀이 저장된다.
  • 16bpp: 픽셀당 16비트를 사용하며, 65,536가지 색상을 표현한다. 2바이트(WORD)에 1개의 픽셀이 저장되며, 각 픽셀은 알파, 빨강, 녹색, 파랑 샘플을 가질 수 있다.
  • 24bpp: 픽셀당 24비트를 사용하며, 16,777,216가지 색상을 표현한다. 3바이트에 1개의 픽셀 값이 저장되며, 각 픽셀은 빨강, 녹색, 파랑 샘플을 가진다(파랑, 녹색, 빨강 순서).[4]
  • 32bpp: 픽셀당 32비트를 사용하며, 4,294,967,296가지 색상을 표현한다. 4바이트(DWORD)에 1개의 픽셀이 저장되며, 각 픽셀은 알파, 빨강, 녹색, 파랑 샘플을 가질 수 있다.


DIB 헤더는 BITFIELDS를 사용하여 픽셀의 특정 비트 그룹이 어떤 채널에 속하는지를 정의한다. 이를 통해 다양한 픽셀 형식을 유연하게 지원할 수 있다.[14]

실제로는 수만 개의 픽셀 형식 정의가 가능하지만, 주로 사용되는 것은 몇 가지 안 된다.[22] 예를 들어, RGB8, RGB4, RGB1과 같은 팔레트 형식과 RGB32, ARGB32, RGB24, RGB565 등 비압축 RGB 형식이 있다.

FFmpeg 2.1.4 버전에서는 bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, gray, pal8, monob 등의 BMP 픽셀 형식을 지원했다.[24] 이 중 bgra만이 투명도를 지원했다.

다음은 24비트 비트맵(픽셀 형식 RGB24)과 32비트 비트맵(픽셀 형식 ARGB32)의 예시이다.

2x2 픽셀, 24비트 비트맵 (RGB24) 예시
위치 (x, y)파랑녹색빨강
(0, 1)00255
(1, 1)255255255
(0, 0)25500
(1, 0)02550



4x2 픽셀, 32비트 비트맵 (ARGB32) 예시
위치 (x, y)파랑녹색빨강알파
(0, 1)25500127
(1, 1)02550127
(2, 1)00255127
(3, 1)255255255127
(0, 0)25500255
(1, 0)02550255
(2, 0)00255255
(3, 0)255255255255


5. BMP 파일 형식의 활용

BMP 파일 포맷은 단순하고 윈도우 등 여러 곳에서 널리 쓰이며, 특허에서 비교적 자유롭기 때문에 수많은 운영 체제가 제공하는 그림 처리 프로그램에서 읽고 쓸 수 있는 매우 일반적인 포맷이다. ICO 및 CUR 파일은 BITMAPINFOHEADER로 시작하는 비트맵을 포함한다.[4]

많은 이전 그래픽 사용자 인터페이스는 내장 그래픽 서브시스템에서 비트맵을 사용했다.[25] 예를 들어, Microsoft Windows 및 OS/2 플랫폼의 GDI 서브시스템에서 사용되는 형식은 'Windows 및 OS/2 비트맵 파일 형식'이며, 일반적으로 .BMP 파일 확장자로 명명된다.[26]

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

6. 관련 형식

X 윈도 시스템은 흑백 이미지에 XBM 형식을 사용하고, 컬러 이미지에는 XPM (픽셀맵) 형식을 사용한다.[4] 이동식 픽스맵 (PPM)과 Truevision TGA 형식도 있지만 덜 사용되거나 특별한 목적에 사용된다. 예를 들어 TGA는 투명도 정보를 포함할 수 있다. ICO 및 CUR 파일은 BITMAPINFOHEADER로 시작하는 비트맵을 포함한다.[25]

7. BMP를 다루는 프로그램 라이브러리

라이브러리설명
윈도우 API(그래픽 장치 인터페이스), HBITMAP[33]비트맵 데이터를 관리하는 객체 핸들. BMP 형식 이미지를 파일이나 리소스에서 읽어 HBITMAP을 생성할 수 있는 각종 C 언어 형식 함수가 준비되어 있다. 윈도우 데스크톱 애플리케이션 전용.
마이크로소프트 파운데이션 클래스(MFC), CBitmap 클래스[34]마이크로소프트가 제공하는 개발 환경인 비주얼 C++(Visual C++)에 부속된 비트맵 조작 클래스. Win32 API의 래퍼. 윈도우 데스크톱 애플리케이션 전용.
액티브 템플릿 라이브러리(ATL), ATL::CImage 클래스[35]마이크로소프트가 제공하는 개발 환경인 비주얼 C++(Visual C++)에 부속된 비트맵 조작 클래스. Win32 API 및 GDI+의 래퍼. 윈도우 데스크톱 애플리케이션 전용.
GDI+, Gdiplus::Bitmap 클래스[36]윈도우 SDK에 부속된 C++ 언어 전용 비트맵 조작 클래스. 윈도우 데스크톱 애플리케이션 전용.
윈도우 이미징 컴포넌트(WIC)컴포넌트 객체 모델 기반의 이미지 라이브러리. 윈도우 데스크톱 애플리케이션/윈도우 스토어 앱에서 사용 가능.
.NET Framework, System.Drawing[37]GDI+의 매니지드 래퍼. 윈도우 데스크톱 애플리케이션 전용. 모노 (소프트웨어)(Mono)에도 호환 구현이 존재한다[38].
.NET Framework, System.Windows.Media.Imaging[39]WIC의 매니지드 래퍼. 윈도우 데스크톱 애플리케이션/윈도우 스토어 앱에서 사용 가능.



서드파티 라이브러리에 관한 각 상세 정보는 외부 링크 항목에 기재되어 있다.

참조

[1] 간행물 Windows Image Media Types
[2] 서적 Encyclopedia of Graphics File Formats https://archive.org/[...] O'Reilly 2014-03-07
[3] 웹사이트 "[MS-WMF]: Windows Metafile Format" http://msdn.microsof[...] MSDN 2014-03-12
[4] 웹사이트 DIBs and Their Uses https://msdn.microso[...] 2015-05-14
[5] MSDN Bitmap Header Types http://msdn.microsof[...]
[6] MSDN BITMAPINFO Structure http://msdn.microsof[...]
[7] 서적 Packed Device-Independent Bitmap (CreateDIBPatternBrush, CreateDIBPatternBrushPt, FindResource, LoadResource, LockResource) https://books.google[...] Windows graphics programming: Win32 GDI and DirectDraw
[8] 웹사이트 pal8os2v2-16.bmp http://entropymine.c[...] 2016-07-06
[9] 웹사이트 BMP Suite http://entropymine.c[...] 2016-07-06
[10] 웹사이트 Invalid BMP Format with Alpha channel https://forums.adobe[...] Adobe 2016-05-22
[11] 서적 Encyclopedia of Graphics File Formats https://archive.org/[...] O'Reilly 2014-03-07
[12] 웹사이트 Microsoft Windows Bitmap: Summary from the Encyclopedia of Graphics File Formats https://www.fileform[...]
[13] 웹사이트 JPEG and PNG Extensions for Specific Bitmap Functions and Structures http://msdn.microsof[...]
[14] MSDN BITMAPINFOHEADER (Windows CE 5.0): BI_ALPHABITFIELDS in biCompression member http://msdn.microsof[...]
[15] MSDN BITMAPV4HEADER: The member bV4AlphaMask http://msdn.microsof[...]
[16] MSDN RGBQUAD: rgbReserved member http://msdn.microsof[...]
[17] MSDN MSDN BITMAPINFOHEADER http://msdn.microsof[...]
[18] 웹사이트 Image Stride - Win32 apps https://learn.micros[...]
[19] MSDN BITMAPINFOHEADER: The member biBitCount http://msdn.microsof[...]
[20] 웹사이트 Types of Bitmaps http://msdn.microsof[...] MSDN 2014-03-16
[21] MSDN Windows CE - BITMAPINFOHEADER Structure http://msdn.microsof[...]
[22] Adobe Photoshop BMP Format http://livedocs.adob[...]
[23] 웹사이트 Uncompressed RGB Video Subtypes http://msdn.microsof[...] MSDN 2014-03-11
[24] 웹사이트 Image Formats http://www.ffmpeg.or[...] 2014-02-23
[25] 서적 Cross-Platform GUI Programming with Wxwidgets https://books.google[...] Prentice Hall
[26] 웹사이트 Bitmap Image File (BMP), Version 5 http://www.digitalpr[...] Library of Congress 2014-03-11
[27] 웹사이트 DIB(Device Independent Bitmap)とは - IT用語辞典 e-Words http://e-words.jp/w/[...]
[29] 웹사이트 Windows Bitmap Media Type Registration Application https://datatracker.[...]
[31] 웹사이트 Invalid BMP Format with Alpha channel https://forums.adobe[...]
[32] 웹사이트 '[MS-WMF]: Compression Enumeration | Microsoft Docs' https://docs.microso[...]
[33] 웹사이트 Windows Data Types - Windows applications | Microsoft Docs https://docs.microso[...]
[34] 웹사이트 CBitmap Class | Microsoft Docs https://docs.microso[...]
[35] 웹사이트 CImage Class | Microsoft Docs https://docs.microso[...]
[36] 문서 Bitmap (gdiplusheaders.h) | Microsoft Docs https://docs.microso[...]
[37] 문서 System.Drawing Namespace | Microsoft Docs https://docs.microso[...]
[38] 문서 Drawing | Mono https://www.mono-pro[...]
[39] 문서 System.Windows.Media.Imaging Namespace | Microsoft Docs https://docs.microso[...]
[40] 서적 2006



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com