在这个帖子里,集中说明如何制造一个包含中文字体的字库。 J7 f! z/ V. B% X- c3 v/ N3 o
在看这个帖子前,请先看一下这个帖子
. S3 n- K' z& ^, O( \( W' Thttps://www.chinaavg.com/read.php?tid=18959* E& D/ C( {5 T% X7 L% W P
为了便于理解,我制作了一个示意图,看了示意图应该很容易理解字库的结构。
: d% E% H" C. ]/ d3 s8 K3 L6 d4 C- N. E6 Z! K5 T
示意图如下:
+ x5 X7 [3 K5 c6 i6 V
, I( R1 y' }7 s/ K' l" j, ~: y. F4 o: f+ _+ t& N6 ^* Z0 \/ F
原来的字库的高度均为26个像素。每个像素用一个字节表示。) B+ Y5 z2 ~# I) @7 [
背景像素 0x00
4 u+ F( k9 i1 w) X. T7 f }边框像素 0xC8
; M, h9 `8 ~2 X! H# `字体像素 0xC1
8 \) q4 @$ ?: Z# L+ ^' F# o" v! a: | g
我的设计是 中文字体的高度也为26个像素,宽度固定为20个像素。
0 R; {& V0 j2 e$ p/ Z; W4 Y原来的边框的宽度为2个像素,我觉得太宽了,不太好看,决定中文的边框为1个像素。7 ?* Y3 S; t7 F9 M, F2 d
我用一个中文的田字来演示字库的结构,黑色表示边框像素,红色表示字体像素,黄色表示背景像素。背景像素在显示到画面上以后,会被画面的像素所取代,字体像素会被设定的字体颜色所取代。+ H8 ?1 L) Q2 r) R/ ?* d
边框像素的值是固定不变的。% b2 b" ?) o; f" j7 Z
/ O* `0 Q/ \, y/ D: Q' h我们要把这6000多个汉字的字模加在原来的字库的最后,然后在字库的索引部分也加上这6000多个汉字在字库中的索引。别忘了,在每个字的字模的前面有一个小的文件头,也要加上。总之,制作出来的字库和原来的字库的结构要完全保持一致。: h; \! e/ `/ g
2 S3 r: X/ j" Y7 u% e下面说一下如何制作这个字库。
9 h3 Z% w8 \6 f- c7 Y' a有一个工具,可以把TTF字体转化为点阵字库。以前在极速天龙的汉化中也用过这个工具。0 X- j+ g: S) u' X
工具如下: z! m9 s9 U5 Y3 ]4 X
https://www.chinaavg.com/read.php?tid=17138
" ?+ c! d( L# L/ q3 n E! X! M
" m( f( {! `- z# p9 S制作出来的字库是字节对齐的,由于这次制作的字体的大小(不含边框)是16X16的点阵大小。
/ h( A: o, |( b) _+ p: }! e; c所以字节对齐的问题可以不用考虑。
6 x* e9 h% s8 s, H1 Q2 ]/ z3 h' x* H2 G- b
1. 用这个工具制作16X16的点阵字库。每个汉字是32个字节。
( {& ~7 f# Q5 @7 z1 f9 K, k2. 这个字库每个像素是用1个bit表示,我们要制作一个转换程序,把它转换为上面示意图的格式。
1 G) E0 G9 Z& |7 d 有色点的像素用0xC1来表示# M9 {/ }6 H' a8 @) d2 O' i* _
无色点的像素用0x00来表示7 C% ?, Y& u+ \, C0 \% M
另外,用这个工具制作16X16的点阵字库是不含边框的,所以我们先要制作出边框来。7 H: { [9 ^: u* d. S
我们可以这么做
5 ^! ~ B( i4 B O8 z9 k9 e(1) 用0x00填充 26X20 的矩阵
+ j1 e% R* q% J+ ?$ a" U% L I(2) 用0xC8把原16X16的点阵字形用上下左右,及4个45度方向共8个方向,画8次。( n( C9 t( f$ m6 p/ y
(3) 用0xC1把原16X16的点阵字形在原位置画1次。* W; g2 v I9 g( F2 \
5 A! x( |8 u0 K# N7 U. K
这样就能制作出符合要求的中文字库。 |