BMP 파일이란?
확장자가 .BMP인 파일은 비트맵 디지털 이미지를 저장하는 데 사용되는 비트맵 이미지 파일을 나타냅니다. 이러한 이미지는 그래픽 어댑터와 무관하며 DIB(장치 독립 비트맵) 파일 형식이라고도 합니다. 이 독립성은 Microsoft Windows 및 Mac과 같은 여러 플랫폼에서 파일을 여는 목적을 제공합니다. BMP 파일 형식은 데이터를 다양한 색상 깊이의 흑백 및 색상 형식의 2차원 디지털 이미지로 저장할 수 있습니다.
BMP 파일 형식 사양
장치 독립 비트맵은 장치와 응용 프로그램 간에 비트맵을 교환하는 데 도움이 됩니다. 이 파일 형식의 지속적인 발전으로 인해 헤더에 포함된 정보는 Bitmap 버전에 따라 다를 수 있습니다. 단일 비트맵 파일은 특정 시퀀스의 고정 및 가변 크기 구조로 구성됩니다.
비트맵 파일의 구조는 다음 순서로 정렬됩니다.
구조 | 선택 | 크기 | 목적 |
---|---|---|---|
파일 헤더 | 아니오 | 14 | 비트맵 이미지 파일에 대한 일반 정보를 저장하려면 |
DIB Header | No | Fixed-Size | 비트맵 이미지에 대한 자세한 정보를 저장하고 픽셀 형식을 정의합니다. |
추가 비트 마스크 | 예 | 12 또는 16바이트 | 픽셀 형식을 정의하려면 |
색상 팔레트 | 반 선택사항 | 가변 크기 | 비트맵 이미지 데이터에 사용되는 색상을 정의하려면 |
Gap1 | 예 | 가변 크기 | 구조 정렬 |
픽셀 배열 | 아니요 | 가변 크기 | 픽셀 형식은 DIB 헤더 또는 추가 비트 마스크에 의해 정의됩니다. |
Gap2 | 예 | 가변 크기 | 구조 정렬 |
ICC 색상 프로파일 | 예 | 가변 크기 | 색상 관리를 위한 색상 프로파일을 정의하려면 |
비트맵 이미지가 메모리에 로드되면 Windows에서 GDI API를 통해 사용하는 DIB 구조가 됩니다. 파일 헤더는 이 데이터 구조의 일부가 아닙니다. 색상은 명시적 RGB 색상 정의 대신 현재 참조된 팔레트에 대한 인덱스를 구성하는 16비트 항목으로 구성될 수도 있습니다. 이들 중 일부, 특히 헤더를 자세히 살펴보겠습니다.
비트맵 파일 헤더
비트맵 파일 헤더는 파일을 식별하는 데 사용되는 다른 파일 헤더와 유사합니다. BMP 파일 형식에는 다양한 변형이 있으므로 BMP 파일 형식의 처음 2바이트는 ASCII 인코딩에서 문자 “B"와 문자 “M"입니다. 모든 정수 값은 리틀 엔디안 형식으로 저장됩니다.
오프셋 16진수 | 오프셋 10진수 | 크기 | 목적 |
---|---|---|---|
00 | 0 | 2 바이트 | BMP 및 DIB 파일을 식별하는 데 사용되는 헤더 필드는 ASCII의 BM과 동일하게 16진수로 0x42 0x4D입니다. 가능한 값을 따를 수 있습니다.* 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바이트 | 예약됨; 실제 값은 이미지를 생성하는 애플리케이션에 따라 다릅니다. |
08 | 8 | 2바이트 | 예약됨; 실제 값은 이미지를 생성하는 애플리케이션에 따라 다릅니다. |
0A | 10 | 4 바이트 | 비트맵 이미지 데이터(픽셀 배열)를 찾을 수 있는 바이트의 오프셋, 즉 시작 주소입니다. |
DIB 헤더(비트맵 정보 헤더)
이미지에 대한 자세한 정보는 이 헤더로 표시됩니다. 이 정보를 기반으로 화면에 이미지를 표시하는 데 사용할 애플리케이션이 결정됩니다. 이러한 모든 헤더에는 크기를 지정하는 DWORD(32비트) 필드가 포함되어 있어 애플리케이션이 이미지에 사용된 헤더를 쉽게 결정할 수 있습니다. 이것은 기본적으로 DIB 형식이 여러 확장을 거쳤기 때문입니다. 다음은 나열된 필드가 있는 DIB 헤더입니다.
색상 팔레트
BMP 색상 팔레트는 디스플레이 장치의 색상 팔레트에 있는 각 색상의 RGB 강도 값을 지정하는 구조의 배열입니다. 비트맵 데이터의 각 픽셀은 색상 팔레트에 대한 인덱스로 사용되는 단일 값을 저장합니다. 해당 인덱스의 요소에 저장된 색상 정보는 해당 픽셀의 색상을 지정합니다. 비트맵 파일의 색상 가용성은 다음과 같이 다양합니다.
- 1, 4, 8비트 - 항상 색상 팔레트를 포함할 것으로 예상됨
- 16비트, 24비트 및 32비트 - 색상 팔레트를 포함하지 않음
- 16비트 및 32비트 BMP 파일 - 색상 팔레트 대신 비트필드 마스크 값 포함
픽셀 스토리지
비트맵 픽셀은 각 행의 크기가 패딩에 의해 4바이트(32비트 DWORD)의 배수로 반올림되는 행에 패킹된 비트로 저장됩니다. 이미지의 픽셀을 저장하는 데 필요한 총 바이트 수는 비트 수만으로 직접 계산할 수 없습니다. 패딩이 포함되기 때문에 각 행의 크기를 4바이트의 배수로 반올림하는 효과가 필요합니다. 패딩 바이트(반드시 0은 아님)는 행의 길이를 4바이트의 배수로 만들기 위해 행 끝에 추가되어야 합니다. 픽셀 어레이가 메모리에 로드될 때 각 행은 4의 배수인 메모리 주소에서 시작해야 합니다.
이미지는 실제로 픽셀 배열의 32비트 DWORD 표현으로 설명됩니다. 일반적으로 픽셀은 왼쪽 하단 모서리에서 시작하여 왼쪽에서 오른쪽으로 이동한 다음 이미지의 아래쪽에서 위쪽으로 행별로 “상향식"으로 저장됩니다. 픽셀 형식과 그 의미는 다음과 같습니다.
- 픽셀당 1비트(1bpp) 형식은 2가지 고유한 색상(예: 흑백)을 지원합니다.
- 픽셀당 2비트(2bpp) 형식은 4가지 고유한 색상을 지원하고 1바이트당 4픽셀을 저장합니다. 맨 왼쪽 픽셀은 2개의 최상위 비트에 있습니다. 각 픽셀 값은 최대 4가지 색상의 테이블에 대한 2비트 인덱스입니다.
- 픽셀당 4비트(4bpp) 형식은 16가지 고유한 색상을 지원하고 1바이트당 2픽셀을 저장합니다. 가장 왼쪽 픽셀은 더 중요한 니블에 있습니다. 각 픽셀 값은 최대 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비트).
- 픽셀당 32비트(32bpp) 형식은 4,294,967,296개의 고유한 색상을 지원하고 4바이트 DWORD당 1픽셀을 저장합니다. 각 DWORD는 픽셀의 알파, 빨강, 녹색 및 파랑 샘플을 정의할 수 있습니다.