星期二, 12月 16, 2008

Bitmap Font File Format

點陣檔(bitmap file)是一種二元檔,用來存字元的點陣(bitmap)。
同時也會有一個相對應的索引檔,HBF file。
以下所描述的格式相當通用;特別是很多提供點陣字型的廠商可以直接使用,
而不需修改。

點陣字的結構
"寬x高" 大小的點陣字以列(row)為單位從上到下儲存,每列使用一整個位元數。
每一列佔 (寬 + 7)/8 位元組,以無條件捨去計算。
每列從左到右儲存,最左的圖點在第一個位元組的最高有效位(MSB)。
因此,每個點陣字會佔去 (高 * ((寬 + 7)/8) 位元組。例如:

16x16 點陣字佔去 16 * ((16 + 7)/8) = 32 bytes
15x16 點陣字佔去 16 * ((15 + 7)/8) = 32 bytes
16x15 點陣字佔去 15 * ((16 + 7)/8) = 30 bytes
64x64 點陣字佔去 64 * ((64 + 7)/8) = 512 bytes

位元值 1 表示字元的部份,位元值 0 表示背景。

點陣檔中點陣圖的排列
在HBF檔中的每個 HBF_CODE_RANGE 項目定出了點陣字在點陣檔中字元範圍的偏移量。
字元的點陣圖從第一碼到最後一碼連續地存在檔案中,但點陣圖在外部碼的定義被省略了。

例如,假設我們有 24x24 Big5 字型,每個點陣圖佔用 72 位元組。在 Big5,第二位元的範圍為

HBF_BYTE_2_RANGE 0x40-0x7E
HBF_BYTE_2_RANGE 0xA1-0xFE



HBF_CODE_RANGE 0xA440-0xC67E stdfont.24k 0

表示點陣圖的偏移量在檔案中為

0 bitmap for character A440
72 bitmap for character A441
... ...
4464 bitmap for character A47E
4536 bitmap for character A4A1
... ...
11232 bitmap for character A4FE
11304 bitmap for character A540
... ...
395568 bitmap for character C67E

沒有留言: