位圖字體分佈格式

位圖字體分佈格式（；縮寫作BDF）是一種存儲位圖字體的文件格式，由美國阿道比公司開發。它是一種人類和計算機都可讀的文本文件。位圖字體分佈格式通常使用在UNIX X WINDOW 環境。不過，現時BDF的地位已被PCF字體格式及向量字體格式Opentype和Truetype所取代。PCF檔其實是編譯好成二進位檔的BDF檔案，所以更具效率。

Overview
當前的最新版本是2.2版。預計未來將沒有新版本被修訂。早期的版本被称为字符位图分布格式（Character Bitmap Distribution Format）。

在1988年，X財團採用2.1版本的位圖字體分佈格式作爲X窗口系統的屏幕字體的標準格式，但是X窗口系統已經基本遷移到了其他字體標準，例如PCF、Opentype和Truetype。

2.2版添加了對非西方文字的支持。例如，2.2版本的可以定義自上到下的字形而不是僅僅由左至右。

一個位圖字體分佈格式的字體包括三個部分：
一個適用於字體中全部字形的全局設定部分；
每個字形都有單獨設定的部分；和，
字體結束（ENDFONT）聲明。

範例
以下為一個範例字型檔，只包含一個字元的定義（見第10行），就是大寫A字。這個字的定義取自GNU Unifont。

<nowiki>
STARTFONT 2.1
FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1
SIZE 16 75 75
FONTBOUNDINGBOX 16 16 0 -2
STARTPROPERTIES 2
FONT_ASCENT 14
FONT_DESCENT 2
ENDPROPERTIES
CHARS 1
STARTCHAR U+0041
ENCODING 65
SWIDTH 500 0
DWIDTH 8 0
BBX 8 16 0 -2
BITMAP
00
00
00
00
18
24
24
42
42
7E
42
42
42
42
00
00
ENDCHAR
ENDFONT
</nowiki>

在以上的範例，「全局設定」部分從"STARTFONT" 一行開始，至有"CHARS"的一行為止。

"STARTFONT 2.1"定義這個BDF檔案採用了2.1版本的格式。

"FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1" 這一行定義了字體的名稱。 字體族和顯示名稱是一個X邏輯字體描述。

"SIZE 16 75 75" 定義這是一個16點字體，X軸和Y軸都是一吋75點。這是X窗口系統的規範。

"FONTBOUNDINGBOX 16 16 0 -2"定義了一個16*16的包圍框，左下角座標是(0,-2)。注意，儘管包圍框被定義爲了16*16的單元格，但是單個字形是可以重定義字形本身的。比如範例中的大寫拉丁字母「A」，它只有八像素寬。

"STARTPROPERTIES 2"聲明了兩個特殊屬性。"STARTPROPERTIES"在BDF標準中是可選的。X窗口系統允許特性FONT_ASCENT和FONT_DESCENT分別定義全部字形顯示基線的上下高度，"FONT_ASCENT 14"聲明在全部的16個像素中，有14個像素在基線以上。"FONT_DESCENT 2"反之聲明了有兩個像素在基線下。"ENDPROPERTIES"在"STARTPROPERTIES"部分之後出現。

"CHARS 1"聲明後面將跟隨一個字形。儘管阿道比公司現在管這個文件格式叫BDF字形，但是他們還是在關鍵字中保留了關鍵字"CHARS"。

在BDF文件的行開頭插入關鍵字"COMMENT"的話，這行裏關鍵字之後的任何字符都會被忽略。 

以上的全局聲明是對每個字形都生效的。

"STARTCHAR U+0041"在2.1版及之前版本中指字符代码的开始，而在2.2版本中指字形代码的开始。这个单字符的字符串名称是"U+0041"，在Unicode标准中指十六进制代码点41（十进制64，ASCII字符「A」）。在2.1版及之前版本中字符名称字符串的长度被限制在14字以内。在2.2版本中，字形名称最多能有65535字。

"ENCODING 65"声明这个字体中这个字形的代码点。

"SWIDTH 500 0"声明X轴（缺省）和Y轴的可扩展长（宽）度是500。这将使X轴偏移到下个字形，但是下个字形的Y轴没有偏移（既字形在一条直线上出现）。可扩展宽是 阿道比字体度量 (AFM)文件中，同一字符实际尺寸的一千倍。像素数据是以以下公式创建的

像素=(可扩展宽度÷1000)×(分辨率÷72),

这个案例中scalable_width的参数是500，并且这个字体的分辨率是75DPI，因为75约等于72，所以像素数量是字形（全局定义为16像素）全宽的500/1000倍，换句话说，就是说这个字形的宽度是8像素。

"DWIDTH 8 0"声明字形的驱动宽度。在这种情况下，在字形被渲染之前，下个字形在当前基础上X轴偏移8像素、Y轴偏移0像素。注意：设备宽度不一定等于字形宽度。它仅仅是X轴层面上的偏移，把图元放置点放置到下个字形的开始位置。

可扩展宽度被用于计算打印机上的高分辨率字形，然而，设备宽度是用于字形在显示设备上的宽度的。这导致可扩展宽度的精确度更高。

"BBX 8 16 0 -2"声明了一个8像素宽，16像素高的边界盒。字符的左下角，X、Y轴分别偏移了一个和零个像素。

"BITMAP"开始当前字形的位图。Y轴上必须是一个像素一分行。在这个范例字形中，字形是16像素高的，所以这里有16行。每一行都是当前行像素分布的十六进制表示。每一比特都将渲染一个像素。每一行都末尾都用二进制的零补全。在这个范例中，字形正好是八像素宽，所以每行正好占据了八比特（一字节），以至于不需要补零。最重要的是奌阵是从最左边的像素开始渲染的。

"ENDCHAR"是当前字形结束标志。

字体里的每个字形都需要"STARTCHAR"和"ENDCHAR"来声明。

"ENDFONT" 出现在文件的最后一行，在字体中所有字形都被枚举之后。

注释

参考资料

外部链接
 Adobe Glyph Bitmap Distribution Format (BDF) Specification, version 2.2

Font formats
X Window System