WBMP
1. 개요
WBMP는 이미지의 유형, 크기, 픽셀 데이터를 포함하는 가변 길이 필드로 구성된 파일 형식이다. 흑백 비트맵을 표현하며, Type, Fixed header, Width, Height, Data 필드로 구성된다. 각 필드는 가변 길이 부호 없는 정수인 uintvar 형식으로, 이미지의 폭과 높이를 픽셀 수로 나타낸다.
| 이름 | Wireless Bitmap |
|---|---|
| 확장자 | .wbmp |
| MIME 형식 | image/vnd.wap.wbmp |
| 소유자 | WAP Forum |
| 장르 | 이미지 파일 포맷 |
2. 파일 형식
WBMP 파일은 이미지의 유형, 크기, 픽셀 데이터를 포함하는 가변 길이 필드로 구성된다.
| 필드명 | 필드 타입 | 크기 (바이트) | 용도 |
|---|---|---|---|
| Type | uintvar | 가변 | 이미지의 타입. 0인 경우, 흑백 비트맵을 의미한다. |
| Fixed header | 바이트 | 1 | 예약되어 있다. 항상 0. |
| Width | uintvar | 가변 | 이미지의 폭을 픽셀 수로 나타낸 것. |
| Height | uintvar | 가변 | 이미지의 높이를 픽셀 수로 나타낸 것. |
| Data | byte array | 가변 | 이미지 데이터를 라인 단위로 배열한 것. 1비트가 1픽셀에 대응한다. 검은 픽셀은 0, 흰 픽셀은 1. 라인의 폭이 8로 나누어 떨어지지 않는 경우, 바이트 경계까지 0을 채운다. |
unitvar는 비트 열을 7비트씩 분할하고, 마지막 7비트만 최상위 비트를 0, 그 외는 최상위 비트를 1로 한 바이트 열로 가변 길이 정수를 나타내는 형식이다.
2.1. 필드 구성
WBMP 파일의 각 필드는 다음과 같은 정보를 담고 있다.
| 필드명 | 필드 타입 | 크기 (바이트) | 용도 |
|---|---|---|---|
| Type | uintvar | 가변 | 이미지의 타입. 0인 경우, 흑백 비트맵을 의미한다. |
| Fixed header | 바이트 | 1 | 예약되어 있다. 항상 0. |
| Width | uintvar | 가변 | 이미지의 폭을 픽셀 수로 나타낸 것. |
| Height | uintvar | 가변 | 이미지의 높이를 픽셀 수로 나타낸 것. |
| Data | byte array | 가변 | 이미지 데이터를 라인 단위로 배열한 것. 1비트가 1픽셀에 대응한다. 검은 픽셀은 0, 흰 픽셀은 1. 라인의 폭이 8로 나누어 떨어지지 않는 경우, 바이트 경계까지 0을 채운다. |
unitvar는 비트 열을 7비트씩 분할하고, 마지막 7비트만 최상위 비트를 0, 그 외는 최상위 비트를 1로 한 바이트 열로 가변 길이 정수를 나타내는 형식이다.
2.2. uintvar 형식
uintvar는 가변 길이 부호 없는 정수를 나타내는 형식이다. 비트 열을 7비트씩 분할하여, 마지막 7비트만 최상위 비트를 0으로, 그 외에는 최상위 비트를 1로 설정한 바이트 열로 표현한다.
WBMP 형식에서 uintvar는 이미지의 타입, 폭, 높이를 나타내는 데 사용된다. 이미지 타입은 0인 경우 흑백 비트맵을 의미한다. 이미지의 폭과 높이는 픽셀 수로 나타낸다.
3. 구체적인 예시
다음은 3x3 크기의 흑백 이미지를 WBMP 형식으로 나타낸 예시이다. (b = 검정, w = 흰색)
```
행 1 - bwb
행 2 - wbw
행 3 - bwb
```
위 비트맵을 WBMP로 표현하면 다음과 같다. 각 행은 3비트이므로, 5비트의 0을 추가하여 바이트 경계에 맞춘다.
```
옥텟 1: 00000000 (WBMP 유형)
옥텟 2: 00000000 (고정 헤더)
옥텟 3: 00000011 (너비) = 3
옥텟 4: 00000011 (높이) = 3
옥텟 5: 010 00000 (행 1)
옥텟 6: 101 00000 (행 2)
옥텟 7: 010 00000 (행 3)