1. http://fontforge.sourceforge.net/pcf-format.html
2. http://www.tsg.ne.jp/GANA/S/pcf2bdf/pcf.pdf
3. http://wenq.org
正文
文泉驿是开源的点阵字库,2004年我就开始关注过。现在已经挺不错了。
以前好像还用BDF文件格式,当时我写的Java程序。
现在用了PCF格式,基本差不多,我也正好体验了一下PCF文件。
上面的参考资料的基础上再加一点补充和说明,并结合具体wqy字体:
PCF显示一个目录,然后分这么几个区
PCF PROPERTIES = (1<<0),
字体整体的属性,给人看的,程序不用关心。比如wqy字体的是:
[ FONT_NAME : WenQuanYi Bitmap Song ]
[ FAMILY_NAME : WenQuanYi Bitmap Song ]
[ FOUNDRY : WenQuanYi ]
[ FONT_VERSION : 000.990 ]
[ WEIGHT_NAME : Medium ]
[ SETWIDTH_NAME : Normal ]
[ PIXEL_SIZE ]
[ POINT_SIZE ]
[ RESOLUTION_X ]
[ RESOLUTION_Y ]
[ RESOLUTION ]
[ SPACING : P ]
[ UNDERLINE_POSITION ]
[ UNDERLINE_THICKNESS ]
[ QUAD_WIDTH ]
[ CHARSET_REGISTRY : ISO10646 ]
[ CHARSET_ENCODING : -1 ]
[ CHARSET_COLLECTIONS : ASCII ISO8859-5 GB2312.1980 BIG5-0 KSC5601.1989-0 JISX0208.1997 ISO10646-1 ]
[ FONT : -wenquanyi-wenquanyi bitmap song-medium-r-normal--13-130-75-75-P-80-iso10646-1 ]
[ WEIGHT ]
[ X_HEIGHT ]
PCF ACCELERATORS = (1<<1),
整体的一些属性,如[noOverlap:1,constantMetrics:0,terminalFont:0,constantWidth:0,inkInside:0,inkMetrics:0,drawDirection:0,dummy:0,fontAscent:0,fontDescent:0,maxOverlap:0]
程序不用关心(至少本文的范畴)。
PCF METRICS = (1<<2),
wyq 29877 个字的字体属性,如“牛”字的为[leftSideBearing:0,rightSideBearing:12,characterWidth:13,ascent:11,descent:1]
含义见参考文档2.
PCF BITMAPS = (1<<3),
wyq 29877 个字的点阵。
PCF INK METRICS = (1<<4),
没用。
PCF BDF ENCODINGS = (1<<5),
参考文档2.上写的似乎令人误解,其实是编码(这个范畴使用UTF-16),对应的29877 个字中的序号。 wyq的是 0-255 × 0-255 是UTF-16的全体。 可以用来速查某个字的定位, 比如“牛”字序号为17418
PCF SWIDTHS = (1<<6),
wyq 29877 个字的字体宽度,单位是em-units,比如一个汉字基本都是1000.
程序也可以不关心。
PCF GLYPH NAMES = (1<<7),
wyq 29877 个字的名字, 比如“牛”字为"U_725B",是UTF-16编码相关的。
由于序号在PCF BDF ENCODINGS中可以查到,所以这里的信息可以忽略。
PCF BDF ACCELERATORS = (1<<8)
没用。
总结, 显示一个汉字,需要先查到它的UTF16编码,然后在PCF BDF ENCODINGS表中查到序号,然后得到点阵BITMAP,然后需要从PCF METRICS得到它的高度和宽度,字不同,高度和宽度都不同的,所以需要注意。 最后,我写的python程序。
下面是“牛Linux繁赢”的在10pt字库下的效果:
0x725b 29275,17418(11-1,12),(0-12,13)
......#.....
..#...#.....
..#...#.....
..#########.
.#....#.....
#.....#.....
......#.....
############
......#.....
......#.....
......#.....
......#.....
0x4c 76,46(9-0,9),(0-6,7)
#.....
#.....
#.....
#.....
#.....
#.....
#.....
#.....
######
0x69 105,75(9-0,9),(0-1,2)
#
.
#
#
#
#
#
#
#
0x6e 110,80(7-0,7),(0-6,7)
#.###.
##...#
#....#
#....#
#....#
#....#
#....#
0x75 117,87(7-0,7),(0-6,7)
#....#
#....#
#....#
#....#
#....#
#...##
.###.#
0x78 120,90(7-0,7),(0-5,6)
#...#
#...#
.#.#.
..#..
.#.#.
#...#
#...#
0x7e41 32321,20464(11-1,12),(0-12,13)
.#......#...
.###########
.#.#.#..#.#.
########.#..
.#.#.#..#.#.
.#####.#...#
....#####...
.....#...#..
..#########.
......#.....
..##..#..#..
##...##...##
0x8d62 36194,24337(11-1,12),(0-12,13)
.....#......
############
.#..........
.##########.
..#.....#...
.#########..
.#.#...#.#..
.#######.#..
.#.#.#.###..
.###.#.#.#.#
.#.#.#.#.#.#
#.###.#..###
没有评论:
发表评论