Windows는 픽셀당 8비트 또는 4비트로 색을 정의하는 비트맵 압축 형식을 지원합니다. 압축은 비트맵에 필요한 디스크 및 메모리 스토리지를 줄입니다.
비트맵 정보 헤더 구조의 압축 멤버가 BI_RLE8 경우 RLE(실행 길이 인코딩) 형식을 사용하여 8비트 비트맵을 압축합니다. 이 형식은 인코딩 또는 절대 모드로 압축할 수 있습니다. 두 모드는 동일한 비트맵의 어디에서나 발생할 수 있습니다.
- 인코딩 모드 두 바이트로 구성됩니다. 첫 번째 바이트는 두 번째 바이트에 포함된 색 인덱스를 사용하여 그릴 연속 픽셀 수를 지정합니다. 또한 쌍의 첫 번째 바이트는 두 번째 바이트의 값에 따라 줄의 끝, 비트맵의 끝 또는 델타를 나타내는 이스케이프 문자를 나타내도록 0으로 설정할 수 있습니다. 이스케이프의 해석은 다음 값 중 하나일 수 있는 쌍의 두 번째 바이트 값에 따라 달라집니다.
| 값 | 의미 |
|---|---|
| 0 | 줄의 끝입니다. |
| 1 | 비트맵의 끝입니다. |
| 2 | 삼각주. 이스케이프 다음의 2바이트에는 현재 위치에서 다음 픽셀의 오른쪽 및 위쪽 오프셋을 나타내는 부호 없는 값이 포함됩니다. |
- 절대 모드첫 번째 바이트는 0이고 두 번째 바이트는 03H~FFH 범위의 값입니다. 두 번째 바이트는 다음의 바이트 수를 나타내며, 각 바이트에는 단일 픽셀의 색 인덱스가 포함됩니다. 두 번째 바이트가 2개 이하인 경우 이스케이프는 인코딩된 모드와 동일한 의미를 둡니다. 절대 모드에서 각 실행은 16비트 단어 경계에서 끝나려면 0 패딩되어야 합니다.
다음 예제에서는 8비트 압축 비트맵의 16진수 값을 보여줍니다.
[03 04] [05 06] [00 03 45 56 67 00] [02 78] [00 02 05 01]
[02 78] [00 00] [09 1E] [00 01]
비트맵은 다음과 같이 확장됩니다(두 자리 값은 단일 픽셀의 색 인덱스를 나타냅니다.)
04 04 04
06 06 06 06 06
45 56 67
78 78
move current position 5 right and 1 up
78 78
end of line
1E 1E 1E 1E 1E 1E 1E 1E 1E
end of RLE bitmap
압축 멤버가 BI_RLE4 경우 비트맵은 인코딩 및 절대 모드를 사용하는 4비트 비트맵에 대해 실행 길이 인코딩 형식을 사용하여 압축됩니다.
- 인코딩된 모드에서 쌍의 첫 번째 바이트에는 두 번째 바이트의 색 인덱스를 사용하여 그릴 픽셀 수가 포함됩니다. 두 번째 바이트에는 두 개의 색 인덱스가 포함됩니다. 하나는 상위 4비트이고 다른 하나는 낮은 순서의 4비트입니다. 첫 번째 픽셀은 상위 4비트에서 지정한 색을 사용하여 그리고, 두 번째 픽셀은 낮은 순서 4비트의 색을 사용하여 그리고, 세 번째 픽셀은 상위 4비트의 색을 사용하여 그리고, 첫 번째 바이트에서 지정한 모든 픽셀이 그려질 때까지 그려집니다.
- 절대 모드에서 첫 번째 바이트는 0입니다. 두 번째 바이트에는 다음 색 인덱스 수가 포함됩니다. 후속 바이트는 각 픽셀에 대해 하나의 색 인덱스인 상위 및 하위 4비트에 색 인덱스를 포함합니다. 절대 모드에서 각 실행은 단어 경계에 맞춰야 합니다. BI_RLE8 대해 설명된 줄 끝, 비트맵 끝 및 델타 이스케이프도 BI_RLE4 압축에도 적용됩니다.
다음 예제에서는 4비트 압축 비트맵의 16진수 값을 보여줍니다.
03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01
04 78 00 00 09 1E 00 01
비트맵은 다음과 같이 확장됩니다(한 자리 값은 단일 픽셀의 색 인덱스를 나타낸다).
0 4 0
0 6 0 6 0
4 5 5 6 6 7
7 8 7 8
move current position 5 right and 1 up
7 8 7 8
end of line
1 E 1 E 1 E 1 E 1
end of RLE bitmap