点阵字库
字母Y |
对应bit值 |
字母A |
对应bit值 |
||||||||||||||
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
M |
M |
|
|
M |
M |
|
01100110 |
|
|
|
M |
|
|
|
|
00010000 |
|
M |
M |
|
|
M |
M |
|
01100110 |
|
|
M |
M |
M |
|
|
|
00111000 |
|
M |
M |
|
|
M |
M |
|
01100110 |
|
M |
M |
|
M |
M |
|
|
01101100 |
|
M |
M |
|
|
M |
M |
|
01100110 |
M |
M |
|
|
|
M |
M |
|
11000110 |
|
|
M |
M |
M |
M |
|
|
00111100 |
M |
M |
|
|
|
M |
M |
|
11000110 |
|
|
|
M |
M |
|
|
|
00011000 |
M |
M |
M |
M |
M |
M |
M |
|
11111110 |
|
|
|
M |
M |
|
|
|
00011000 |
M |
M |
|
|
|
M |
M |
|
11000110 |
|
|
|
M |
M |
|
|
|
00011000 |
M |
M |
|
|
|
M |
M |
|
11000110 |
|
|
|
M |
M |
|
|
|
00011000 |
M |
M |
|
|
|
M |
M |
|
11000110 |
|
|
M |
M |
M |
M |
|
|
00111100 |
M |
M |
|
|
|
M |
M |
|
11000110 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
|
|
|
|
|
|
|
|
00000000 |
对于字母显示原理如下:
按8*16阵列排列,每一行为一个字节,当读入的位为1时,显示一个点,16个字节全部读入,显示完整的字母
字母Y在asc16字库文件中的信息就是由16个字节表示:00 00 66 66 66 66 3C 18 18 18 18 3C 00 00 00 00
字母A在asc16字库文件中的信息就是由16个字节表示:00 00 10 38 6C C6 C6 FE C6 C6 C6 C6 00 00 00 00
中文显示是同样的道理。只不过中文按16*16阵列排列,每一行为两个字节
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
M |
|
|
M |
|
|
|
|
|
|
|
|
M |
M |
|
|
M |
|
|
|
M |
|
|
|
|
|
|
M |
|
|
|
|
M |
|
|
|
|
M |
|
|
|
|
M |
|
|
|
|
|
M |
|
|
|
|
M |
M |
|
|
M |
|
|
|
|
|
|
M |
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
|
汉字“小”在hzk16f存储信息由32个字节表示:
01 00 01 00 01 00 01 00 01 00 01 00 09 20 19 10 21 08 41 0C 81 04 01 00 01 00 01 00 05 00 02 00
显示一个完整的汉字“小”
一个汉字占2字节我们将高字节称为ch,低字节称为cl。
ch最高位为一,代表汉字,也就是ch&0x80为真,判断为汉字。汉字在汉字库中的具体位置计算公式为:94*(区号-1)+位号-1
对于GB2312 字库,解码的方式如下:
ch=*code;
cl=*(++code);
cl -= 0xa1;
ch -= 0xa1;
offset = ((unsigned long)94*ch + cl)*(size * 2);
例如“小”字,机器码是 D0 A1
ch=0xD0 cl=0xA1
int q = ch - 0xa0 =0x30=48
int w = cl - 0xa0=1
( 94 * ( q - 1 ) + ( w - 1 ) ) =0x1142=4418
也就是“小”字在字库中顺序是在第4418位,在16X16点阵字库中,一个汉字占32字节,所以“小”字的具体偏移量就是4418X32
对于英文来说,它的机器码就是它在字库中的顺序,再乘以16就可以得到英文字母在字库中的具体偏移量。