비트맵 압축
Windows는 픽셀당 8비트 또는 4비트로 해당 색을 정의하는 비트맵을 압축하기 위한 형식을 지원합니다. 압축은 비트맵에 필요한 디스크 및 메모리 스토리지를 줄입니다.
비트맵 정보 헤더 구조의 압축 멤버가 BI_RLE8 경우 RLE(실행 길이 인코딩) 형식을 사용하여 8비트 비트맵을 압축합니다. 이 형식은 인코딩 또는 절대 모드로 압축할 수 있습니다. 두 모드는 동일한 비트맵의 어느 곳에서나 발생할 수 있습니다.
- 인코딩 모드는 두 바이트로 구성됩니다. 첫 번째 바이트는 두 번째 바이트에 포함된 색 인덱스를 사용하여 그릴 연속 픽셀 수를 지정합니다. 또한 쌍의 첫 번째 바이트는 두 번째 바이트 값에 따라 줄의 끝, 비트맵의 끝 또는 델타를 나타내는 이스케이프 문자를 나타내기 위해 0으로 설정할 수 있습니다. 이스케이프의 해석은 다음 값 중 하나일 수 있는 쌍의 두 번째 바이트 값에 따라 달라집니다.
값 | 의미 |
---|---|
0 | 줄의 끝입니다. |
1 | 비트맵의 끝입니다. |
2 | 델타. 이스케이프 다음의 2바이트에는 현재 위치에서 다음 픽셀의 오른쪽 및 위쪽 오프셋을 나타내는 부호 없는 값이 포함됩니다. |
- 절대 모드에서 첫 번째 바이트는 0이고 두 번째 바이트는 FFH를 통해 03H 범위의 값입니다. 두 번째 바이트는 각각 단일 픽셀의 색 인덱스를 포함하는 바이트 수를 나타냅니다. 두 번째 바이트가 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