在这个帖子里,集中说明如何制造一个包含中文字体的字库。
5 g3 B" _1 l, H+ K在看这个帖子前,请先看一下这个帖子( ~ G; I2 D' o& A; t; g
https://www.chinaavg.com/read.php?tid=18959# d6 c" J5 d' v8 ~1 O. P; I
为了便于理解,我制作了一个示意图,看了示意图应该很容易理解字库的结构。
6 e& F4 u" K! Q& X! l5 Q
, x9 I6 V H* X, R2 U" W5 V- K示意图如下:2 L7 J7 y6 h: }6 H8 P4 ~. @
( e9 }' a. Z8 n$ s$ R
' u; s) Z6 ^/ C9 u- u9 U! Y0 n6 Q原来的字库的高度均为26个像素。每个像素用一个字节表示。
: g, |% c* E8 z& V% n2 F8 b5 C( t1 A" A背景像素 0x00% `1 X) f! k; { t0 K3 p
边框像素 0xC8 ) N8 S3 v' f, Y5 r3 \" a
字体像素 0xC1* t( _& `5 D) [9 A
$ W& Y2 o9 v6 P我的设计是 中文字体的高度也为26个像素,宽度固定为20个像素。
5 O3 W/ \6 {/ s- ^# b4 L原来的边框的宽度为2个像素,我觉得太宽了,不太好看,决定中文的边框为1个像素。 I O- M. r( i
我用一个中文的田字来演示字库的结构,黑色表示边框像素,红色表示字体像素,黄色表示背景像素。背景像素在显示到画面上以后,会被画面的像素所取代,字体像素会被设定的字体颜色所取代。
2 h0 D4 B% x+ k( Y m9 P+ s边框像素的值是固定不变的。 _: ^5 I0 `! R& f6 a" A
5 d9 c! b4 Y% e; s2 O. T3 J我们要把这6000多个汉字的字模加在原来的字库的最后,然后在字库的索引部分也加上这6000多个汉字在字库中的索引。别忘了,在每个字的字模的前面有一个小的文件头,也要加上。总之,制作出来的字库和原来的字库的结构要完全保持一致。
0 C7 A' e- l7 u) q b1 b
1 @! p1 x' m9 \7 {$ u; Y# J下面说一下如何制作这个字库。
7 Q9 Y% s I' Q4 \有一个工具,可以把TTF字体转化为点阵字库。以前在极速天龙的汉化中也用过这个工具。
, Z0 Y% _) t$ V1 Z% U" e工具如下:8 a7 z% o; Y9 C5 f: {1 O- [- X* x
https://www.chinaavg.com/read.php?tid=17138
" ]( J0 z1 ~. @9 [( e& L. U
- X0 n) s) R' F X. a. P制作出来的字库是字节对齐的,由于这次制作的字体的大小(不含边框)是16X16的点阵大小。
1 V" Y7 k/ y+ y: Y所以字节对齐的问题可以不用考虑。
& W- Q' `* J( r+ a+ p7 `. R5 @7 Y: e% y& m5 y/ b
1. 用这个工具制作16X16的点阵字库。每个汉字是32个字节。
6 J+ r0 L6 Y4 _2. 这个字库每个像素是用1个bit表示,我们要制作一个转换程序,把它转换为上面示意图的格式。7 i- r5 p3 \" J/ `3 x+ Y1 B
有色点的像素用0xC1来表示
; X( R2 V/ j/ E4 n/ ^1 N 无色点的像素用0x00来表示# b+ n/ X3 {! n. f" t) _7 h8 C
另外,用这个工具制作16X16的点阵字库是不含边框的,所以我们先要制作出边框来。
% D1 m3 i& h! J. L 我们可以这么做
# C' _# m' r: B* M! V(1) 用0x00填充 26X20 的矩阵$ w: M9 N3 Q( Z6 z6 |! [; S4 ]
(2) 用0xC8把原16X16的点阵字形用上下左右,及4个45度方向共8个方向,画8次。
' L. |8 J( \# n. a/ R(3) 用0xC1把原16X16的点阵字形在原位置画1次。7 k% ?4 L, m* y' W& S* R" ~" Z
$ w6 ~# q+ }5 P$ f# _8 ?9 {5 t {
这样就能制作出符合要求的中文字库。 |