在这个帖子里,集中说明如何制造一个包含中文字体的字库。
: ?4 u5 m8 n. c# x9 Z2 Y" D0 W在看这个帖子前,请先看一下这个帖子
+ H. ^8 M$ n* r9 e9 rhttps://www.chinaavg.com/read.php?tid=18959, |7 ]' j4 r5 L. J2 p; Q- x
为了便于理解,我制作了一个示意图,看了示意图应该很容易理解字库的结构。+ P5 R- k( ^% k/ ]
" U9 Y' V. \% h4 r5 M! F3 ]
示意图如下:
, D( J4 O% @: b% K8 z; q" a S / }9 f0 G% [* A' H% k( u$ R* B
9 S" z' _5 s: x0 R3 j: m原来的字库的高度均为26个像素。每个像素用一个字节表示。& T' t3 ~# x) E. D% ~4 H- y. ^ s
背景像素 0x008 @9 J3 s8 p1 u3 b
边框像素 0xC8 1 {, ]# N1 i2 m ?9 R
字体像素 0xC1+ F/ |/ m8 \# b2 [ t$ T
% T* V' n& G' m
我的设计是 中文字体的高度也为26个像素,宽度固定为20个像素。( j8 g3 W! Z' t |' E
原来的边框的宽度为2个像素,我觉得太宽了,不太好看,决定中文的边框为1个像素。* Q1 n( b( i, I
我用一个中文的田字来演示字库的结构,黑色表示边框像素,红色表示字体像素,黄色表示背景像素。背景像素在显示到画面上以后,会被画面的像素所取代,字体像素会被设定的字体颜色所取代。
" ?, u5 k* n$ ^5 c" x+ s$ h8 v边框像素的值是固定不变的。
# J- y$ [- E' Y9 m O. c
9 V% b4 r$ E: m) n* r我们要把这6000多个汉字的字模加在原来的字库的最后,然后在字库的索引部分也加上这6000多个汉字在字库中的索引。别忘了,在每个字的字模的前面有一个小的文件头,也要加上。总之,制作出来的字库和原来的字库的结构要完全保持一致。
# L' u' m+ f; N; F( J* O
. M# q/ Z* C% s9 u下面说一下如何制作这个字库。% T {) R& L: Y
有一个工具,可以把TTF字体转化为点阵字库。以前在极速天龙的汉化中也用过这个工具。4 O, ]3 Y$ p( F3 t! l- A
工具如下: q1 l( |2 ~- G. M; P
https://www.chinaavg.com/read.php?tid=17138# U6 P0 V5 w l
( N0 z& j/ i' M; Z5 v
制作出来的字库是字节对齐的,由于这次制作的字体的大小(不含边框)是16X16的点阵大小。* K) V, q5 Y# ` ]* |
所以字节对齐的问题可以不用考虑。 L a H6 T3 {- d9 M
5 V' r; L! Y! g. T# T Q2 p# B
1. 用这个工具制作16X16的点阵字库。每个汉字是32个字节。+ f0 j1 i" X/ N9 c" K
2. 这个字库每个像素是用1个bit表示,我们要制作一个转换程序,把它转换为上面示意图的格式。 `7 L' Z0 M y& j- A
有色点的像素用0xC1来表示8 \; I+ g$ ?+ j8 M \% |
无色点的像素用0x00来表示
% {' [/ x3 p! m$ W, [1 }% T, y 另外,用这个工具制作16X16的点阵字库是不含边框的,所以我们先要制作出边框来。# k$ F; |; u' C
我们可以这么做8 M! Y8 m% _2 d% l6 f
(1) 用0x00填充 26X20 的矩阵
% `& ?" G) g2 Z' u- m+ _(2) 用0xC8把原16X16的点阵字形用上下左右,及4个45度方向共8个方向,画8次。$ ^6 i# a, u) Y# y" |
(3) 用0xC1把原16X16的点阵字形在原位置画1次。
( D S1 L* @/ m+ s, i; |" y
7 ~2 R }. p& j% F4 `( k这样就能制作出符合要求的中文字库。 |