MTK点阵字库介绍:
每个字符都是由点阵组成,每个字符的每个像素由黑或者白两种点填上,假设该字符是14*14,那么
该字符由14*14=196个像素组成,其中黑色部分就型成了A这个字,比如图一所示。
用UE打开该BDF文件可以看到如下内容:
STARTFONT 2.1
COMMENT Used in M3
COMMENT Author: Wangbo(Longcheertel software department)
FONT -Longcheertel-WB medium-r-normal--14-140-75-75-c-140-GB2312-13X14
SIZE 14 75 75
FONTBOUNDINGBOX 14 14 0 -3
STARTPROPERTIES 14
FONT_ASCENT 11
FONT_DESCENT 3
DEFAULT_CHAR 12288
COPYRIGHT "Shanghai Longcheer Telecommunication Co, Ltd."
POINT_SIZE 140
WEIGHT 10
RESOLUTION 103
RESOLUTION_X 75
RESOLUTION_Y 75
X_HEIGHT 4294967295
QUAD_WIDTH 14
ENDPROPERTIES
CHARS 7104
STARTCHAR 601
ENCODING 913
SWIDTH 560 0
DWIDTH 14 0
BBX 14 14 0 -3
BITMAP
0000
0200
0500
0500
0880
0880
1040
1FC0
2020
2020
4010
E038
0000
0000
ENDCHAR
其中
0000
0200
0500
0500
0880
0880
1040
1FC0
2020
2020
4010
E038
0000
0000
这段数据的意思是表示黑白像素的,共14行,第一行0000表示第一行全为白点无黑占,第二0200表示在七位有一个黑点,其他都为白点
MTK字库是由BDF文件通过MCT工具转化而来。
转化后生成一个.H和一个.C文件,其中.h文件里面有四个数组:
L_MTK_Latin_16_Width[]代表每个字符的宽度是多少,数组大小代表字符数目
L_MTK_Latin_16_Offset[]代表每个字符数据在L_MTK_Latin_16_Data里的位置,比如0x0000,0x000A,就是说该字符数据在L_MTK_Latin_16_Data第0位至第10位之间(0x000A转化成十进制后为10),
L_MTK_Latin_16_RangOffse[]
L_MTK_Latin_16_Data[]代表每个字符的实际数据内容
比如:字符A这个BDF文件转化成代码以后如下:
const U8 GB3212_13X14_Width[1]= {
0xE/*字符宽度为14*/
}
const U32 GB3212_13X14_Offset[7105]= {
0x0000,0x0019/*字符数据范围为0-25*/
}
const U32 GB3212_13X14_RangeOffset[3563]= {
0,
}
const U8 GB3212_13X14_Data[1]= {
0x0,0x0,0x10,0x0,0xA,0x80,0x2,0x10,0x1,0x44,0x80,0x20,0xE0,0xF,0x4,0x4,
0x1,0x21,0x80,0x1C,0x70,0x0,0x0,0x0,0x0/*字符A的位图结构*/
}
我们取GB3212_13X14_Data[1]的前四位数据分析一下是怎么表示字符A的
0x0,0x0,0x10,0x0展开成二进制就是:
0000 0000
0000 0000
0001 0000
0000 0000
高低位字节颠倒后就为:
0000 0000
0000 0000
0000 1000
0000 0000
这里的0代表白格,1代表黑格,在第21位有一个1即有一个黑格,与图一正好吻合。
其他数据以此类推。