點陣圖壓縮

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