BDF是XWindow系统中使用的字体文件,全称是Glypn BitmapDistribution Format (BDF)。BDF是Adobe制定的,他是点阵字体的文本描述。因此可以直接使用文本编辑器直接浏览。BDF的文档见http://partners.adobe.com/public/deve ... en/font/5005.BDF_Spec.pdf
字体文件整体信息
下面是文泉驿(http://wenq.org/ )点阵宋体的对应的BDF文件片段:
STARTFONT 2.1
FONT -wenquanyi-wenquanyi bitmap song-medium-r-normal--16-160-75-75-P-80-iso10646-1
SIZE 16 75 75
FONTBOUNDINGBOX 17 18 -1 -4
- STARTFONT 2.1 表示这是BDF规范的版本号,目前的版本号为2.2,2.1是XWindow System使用的字体版本号。
- FONT 说明了这个文件的基本信息。这里为 -wenquanyi-wenquanyi bitmap song-medium-r-normal--16-160-75-75-P-80-
- SIZE 指定了每一个字的大小。格式为 SIZE PointSize Xres Yres. 其中PointSize表示每一个点的大小(单位是什么呢?),Xres, Yres分别表示X和Y方向的分辨率,单位是DPI(表示每平方英寸多少个点,值越大单位面积的点越多,对应的分辨率越高。)。
- FONTBOUNDINGBOX 说明字体点阵方格的基本信息,格式为 FONTBOUNDINGBOX FBBx FBBy Xoff Yoff 这里FBBx FBBy表示字体的宽度和高度,具体意义见后面的例子。
字体文件属性信息
下面是属性信息:STARTPROPERTIES 22
FONT_NAME "WenQuanYi Bitmap Song"
FAMILY_NAME "WenQuanYi Bitmap Song"
FOUNDRY "WenQuanYi"
FONT_VERSION "000.990"
WEIGHT_NAME "Medium"
SETWIDTH_NAME "Normal"
PIXEL_SIZE 16
POINT_SIZE 160
RESOLUTION_X 75
RESOLUTION_Y 75
SPACING "P"
UNDERLINE_POSITION -2
UNDERLINE_THICKNESS 1
QUAD_WIDTH 16
CHARSET_REGISTRY "ISO10646"
CHARSET_ENCODING "-1"
CHARSET_COLLECTIONS "ASCII ISO8859-5 GB2312.1980 BIG5-0 KSC5601.1989-0 JISX0208.1997 ISO10646-1"
WEIGHT 10
X_HEIGHT 7
DEFAULT_CHAR 0
FONT_DESCENT 4
FONT_ASCENT 14
ENDPROPERTIES
- STARTPROPERTIES STARTPROPERTIES 22 是属性描述的开始,这里有22个属性字符,ENDPROPERTIES表示属性段结束。其它的都是一些基本属性描述。
字体信息
CHARS 29889
- CHARS 说明了这个字体文件中有29889个点阵字体。 每一个字体以一个STARTCHAR开始,ENDCHAR结束,例如:
STARTCHAR j
ENCODING 106
SWIDTH 267 0
DWIDTH 4 0
BBX 4 14 -1 -3
BITMAP
10
00
00
00
10
10
10
10
10
10
10
10
10
E0
ENDCHAR
- STARTTCHAR STARTICHAR 说明了这是哪一个字符,这里是字母j.
- ENCODING ENCODING表示该字符的UNICODE编码,这里106是j的UNICODE编码(和ASCII码一致)。
- SWIDTH DWIDTH, BBX 这几个属性的意义在后面的例子中说明。
- BITMAP 指示了这个字符的点阵,用16进制表示。我们把这个点阵展开成2进制,如下:
...........*....
这里用"."表示"0","*"表示"1"
................
................
................
...........*....
...........*....
...........*....
...........*....
...........*....
...........*....
...........*....
...........*....
...........*....
........***.....
现在我们通过实际的例子来看看FONTBOUNDINGBOX和BBX的意义
在这里,每一个字体都对应一个基本的点阵,BDF文件头部的FONTBOUNDINGBOX说明了基本点阵的大小,FONTBOUNDINGBOX的格式为:
FONTBOUNDINGBOX FBBx FBBy Xoff Yoff
其中FBBx和FBBy指定了X方向和Y方向的像素点的个数,也就是上图中横向和纵向的小格子的数目。在这个例子中,FBBx 为 16,FBBy为20。在图中,o表示坐标原点,Xoff和Yoff表示点阵的左下脚相对原点的坐标值,在这个图中,Xoff为-3,Yoff为-6。在 一个字体文件中,每一个字体的基本点阵大小以及原点坐标都是一样的,因此文件头部的FONTBOUNDINGBOX描述了这一个整体信息。 但是不同字体的高度宽度是不一样的,例如j和p就不一样,因此每一个字体都有一个BBX属性,BBX的格式和FONTBOUNDINGBOX类似,
BBX BBw BBh BBxoff0x BByoff0y
这里BBw表示字体的实际最大宽度,在这个图中,BBw为14(比点阵的总宽度少了两个像素,因为在上图中,字母P的最左边,和最右各有一个空 格。),同理高度BBh为15。 BBxoff0x表示字体实际的左下脚相对原点的坐标,这里BBxoff0x为-2,同理BByoff0y为-5。 通过上面的对比就很容易明白FONTBOUNDINGBOX和BBX的区别了。
- DWIDTH DWIDTH表示Device Width,以像素为单位,主要是面对显示器设备的,表示一个字体的坐标原点和下一个字体坐标原点的距离,例如图中,第一个"+"号为当前字体的坐标原 点,第二个"+"号为下一个字体的坐标原点,他们的距离在X方向上是8个像素点,y方向的距离为0,所以DWIDTH为8,0.
- SWIDTH SWIDTH 是Scalable Width,主要是面向打印机设备的,不是很清楚SWIDTH的具体意义,SWIDTH和DWIDTH的转换关系为: DWIDTH =(SWIDTH / 1000) * (resolution / 72) * PointSize 例如在图中j的SIZE PointSize Xres Yres分别为8 200 200 代入公式可得:
取整后约等于 8.
8 = ( 355/1000 ) * ( 200/72 ) * 8 = 0.355 * 2.778 * 8