在这个帖子里,集中说明如何制造一个包含中文字体的字库。. P( L$ }# d5 k: l2 U6 u! C6 q2 ^9 c
在看这个帖子前,请先看一下这个帖子" l+ _3 M; }: L0 s
https://www.chinaavg.com/read.php?tid=18959
0 g$ F2 ?' P. O1 ~ [" G为了便于理解,我制作了一个示意图,看了示意图应该很容易理解字库的结构。% h% H( e% T8 l& W3 L
6 r: z1 \5 T% O% I/ n示意图如下:& K; s( a6 W6 s+ G' F
* p- k* v( r" g5 S. Z9 a
, `$ C) o2 \' x原来的字库的高度均为26个像素。每个像素用一个字节表示。3 q5 C9 b) e. q3 L2 O5 V# n
背景像素 0x00( r9 F+ {. B/ K, k
边框像素 0xC8 1 i { {$ ?: c. ~3 f
字体像素 0xC1
. X: M. V. v( n+ o
( B+ j, W6 J' B/ `* L我的设计是 中文字体的高度也为26个像素,宽度固定为20个像素。. h3 i: n9 D0 H+ O; t
原来的边框的宽度为2个像素,我觉得太宽了,不太好看,决定中文的边框为1个像素。
3 j( ] n0 I) y# F7 o4 p H" @* K我用一个中文的田字来演示字库的结构,黑色表示边框像素,红色表示字体像素,黄色表示背景像素。背景像素在显示到画面上以后,会被画面的像素所取代,字体像素会被设定的字体颜色所取代。
, R: e( F- M8 `$ R9 U+ I, W边框像素的值是固定不变的。
) V. ^' g% z* Q8 `
# L4 ^ H/ x. d9 U7 Y4 P我们要把这6000多个汉字的字模加在原来的字库的最后,然后在字库的索引部分也加上这6000多个汉字在字库中的索引。别忘了,在每个字的字模的前面有一个小的文件头,也要加上。总之,制作出来的字库和原来的字库的结构要完全保持一致。4 g; L8 ]5 N! ?0 h' z. n. j
: R3 T* V: q+ F( X8 d下面说一下如何制作这个字库。
+ [7 P$ N( K+ o Q有一个工具,可以把TTF字体转化为点阵字库。以前在极速天龙的汉化中也用过这个工具。7 C9 a. _6 ~9 |3 j- M! q# D2 J
工具如下:
' e* R/ q: u8 _4 }0 }, xhttps://www.chinaavg.com/read.php?tid=17138( F, V9 `( k# w9 S& e6 A
4 |( Y% X8 I B; ~5 A
制作出来的字库是字节对齐的,由于这次制作的字体的大小(不含边框)是16X16的点阵大小。. z* _/ G* E/ n2 g! i$ c
所以字节对齐的问题可以不用考虑。
* T* z# C5 S5 l' q; y% e9 |3 U0 \$ n
6 d! z4 }8 h K; F' a( p1. 用这个工具制作16X16的点阵字库。每个汉字是32个字节。
! C5 y# U# \3 }- I: i5 q2. 这个字库每个像素是用1个bit表示,我们要制作一个转换程序,把它转换为上面示意图的格式。, R# x, ]' V! t
有色点的像素用0xC1来表示
* ]! ?" R W. S7 R5 \9 {' j 无色点的像素用0x00来表示2 I: g5 Z: W8 k! G: \) M! j
另外,用这个工具制作16X16的点阵字库是不含边框的,所以我们先要制作出边框来。
: z; G: ], Y% |4 \ 我们可以这么做/ _( i: T! X/ j
(1) 用0x00填充 26X20 的矩阵 K' [8 ]& n% K1 U
(2) 用0xC8把原16X16的点阵字形用上下左右,及4个45度方向共8个方向,画8次。
" r. }- M& B2 P" X; z7 B# s- V(3) 用0xC1把原16X16的点阵字形在原位置画1次。
2 G& X4 @, O$ x }6 [ J2 V0 e% _! L$ z
这样就能制作出符合要求的中文字库。 |