在这个帖子里,集中说明如何制造一个包含中文字体的字库。6 y' w5 y7 C5 l. D) s# {4 V
在看这个帖子前,请先看一下这个帖子2 X1 J3 r) C3 q1 q# J
https://www.chinaavg.com/read.php?tid=189592 _: a+ e) I' o( C
为了便于理解,我制作了一个示意图,看了示意图应该很容易理解字库的结构。
8 h) P6 e$ Z/ }9 ~4 t7 ]
6 B2 P* L$ ~3 n5 J. |5 M' X2 u示意图如下:
9 @* Z l, O" M9 a/ R* R 2 }( @% W. j7 B ~9 C# F& K
9 a6 H/ c+ o/ e+ u* u9 c% |) H1 v
原来的字库的高度均为26个像素。每个像素用一个字节表示。
' @, F8 B& V9 p1 Q* o5 q+ g2 H背景像素 0x00
( K9 {" N q$ K: h边框像素 0xC8
% {9 L: _8 U9 `3 |1 N: J! ?7 J字体像素 0xC1
4 K, H5 o& ` |" ]4 v# D( i& L5 A/ D* m" h4 N# Z
我的设计是 中文字体的高度也为26个像素,宽度固定为20个像素。! [ G( F) ?* b# L' w5 C% ^# t
原来的边框的宽度为2个像素,我觉得太宽了,不太好看,决定中文的边框为1个像素。
/ D- R7 e# | w5 e0 w我用一个中文的田字来演示字库的结构,黑色表示边框像素,红色表示字体像素,黄色表示背景像素。背景像素在显示到画面上以后,会被画面的像素所取代,字体像素会被设定的字体颜色所取代。6 w; g. M2 D F1 i
边框像素的值是固定不变的。0 d( m8 r% N4 _6 |/ A7 _3 l" ~
, w3 Q1 H0 R" w
我们要把这6000多个汉字的字模加在原来的字库的最后,然后在字库的索引部分也加上这6000多个汉字在字库中的索引。别忘了,在每个字的字模的前面有一个小的文件头,也要加上。总之,制作出来的字库和原来的字库的结构要完全保持一致。
8 Z3 Y G, }& V; x8 p/ y/ h5 e
' Z W# G2 U( E4 z下面说一下如何制作这个字库。9 c. T* H0 N2 x. k. Y
有一个工具,可以把TTF字体转化为点阵字库。以前在极速天龙的汉化中也用过这个工具。7 L$ R8 M$ y* Q8 s! F
工具如下:
' K7 N3 I# R; j$ c9 W; Nhttps://www.chinaavg.com/read.php?tid=17138
' d: M# D4 W8 \) j5 b0 N( U8 d/ ~1 |- ~, \6 z# J
制作出来的字库是字节对齐的,由于这次制作的字体的大小(不含边框)是16X16的点阵大小。
- @9 X, C2 S" ]5 s( X8 t所以字节对齐的问题可以不用考虑。. m1 h5 ]6 }, k+ J& l
: {! x$ I' m; j
1. 用这个工具制作16X16的点阵字库。每个汉字是32个字节。" G- ~( _2 |2 p
2. 这个字库每个像素是用1个bit表示,我们要制作一个转换程序,把它转换为上面示意图的格式。$ d' L V Q1 W/ p! y$ f
有色点的像素用0xC1来表示" ]* K- O, c, f# `7 D* U' a5 G
无色点的像素用0x00来表示4 U7 w0 o' C7 d6 ?( O
另外,用这个工具制作16X16的点阵字库是不含边框的,所以我们先要制作出边框来。5 g2 M# {; `* ]7 {
我们可以这么做
+ H$ K0 |$ b$ Q) B3 F(1) 用0x00填充 26X20 的矩阵
* F* {5 b' M: @4 |: T(2) 用0xC8把原16X16的点阵字形用上下左右,及4个45度方向共8个方向,画8次。% w+ h8 `$ A+ P9 u g! l. b) |
(3) 用0xC1把原16X16的点阵字形在原位置画1次。6 H U! X/ S) G# `
$ M3 u6 R: U* X, z$ u* q+ f. O
这样就能制作出符合要求的中文字库。 |