點陣圖壓縮
Windows 支援壓縮以每像素 8 或 4 位定義其色彩的點陣圖格式。 壓縮可減少點陣圖所需的磁碟和記憶體記憶體。
當點陣圖資訊標頭結構的 壓縮 成員BI_RLE8時,會使用運行長度編碼 (RLE) 格式來壓縮 8 位位圖。 此格式可以在編碼或絕對模式中壓縮。 這兩種模式都可能發生在相同點陣圖中的任何位置:
- 編碼模式 包含兩個字節:第一個字節會指定使用第二個字節中包含的色彩索引繪製的連續像素數目。 此外,配對的第一個字節可以設定為零,表示逸出字元,表示行尾、位圖結尾或差異,視第二個字節的值而定。 逸出的解釋取決於配對的第二個字節值,這可以是下列其中一個值。
價值 | 意義 |
---|---|
0 | 行尾。 |
1 | 位圖結尾。 |
2 | 三角洲。 逸出后的 2 個字節包含不帶正負號的值,指出從目前位置到下一個像素的位移。 |
- 在 絕對模式中,第一個字節為零,而第二個字節是介於 03H 到 FFH 範圍內的值。 第二個字節代表後面的位元組數目,每個位元組都包含單一圖元的色彩索引。 當第二個字節是兩個或更少時,逸出的意義與編碼模式相同。 在絕對模式中,每個執行都必須以零填補,以在16位字邊界上結束。
下列範例顯示 8 位壓縮點陣圖的十六進位值:
[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 位的色彩繪製,依此方式繪製,直到繪製第一個字節所指定的所有像素為止。
- 在絕對模式中,第一個字節為零。 第二個字節包含下列色彩索引的數目。 後續位元組包含高位和低序 4 位的色彩索引,每個圖元各有一個色彩索引。 在絕對模式中,每個執行都必須對齊字邊界。 BI_RLE8所述的行尾、點陣圖結尾和差異逸出也適用於BI_RLE4壓縮。
下列範例顯示 4 位壓縮點陣圖的十六進位值:
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