在某些产品的显示部分(如点真LED,液晶屏等)往往都要显示汉字,而字库是这类产品系统中必不可少的,最近我也用到了字库这部分,在这里把我的心得和整理的资料分享下.
GB18030字库是一个相对比较全的字库,大小不超过1M字节.本人存储器用的是29c040(两片),对29C040的读操作非常简单,类似于SRAM。主要是怎么样通过汉字的汉字代码找到汉字在存储器中的位置。GB18030每个汉字在存储器中占32字节,这样通过汉字代码算出偏移量,通过偏移量找到汉字在存储器中的位置。下面给出一个比较通用的计算偏移量的程序:
//-----------------------------------------------
//提取字库函数
//----------------------------------------------
unsigned long font_get_bmp_15_16(uchar p_1, uchar p_2)
{
unsigned char c1 = (unsigned char)p_1;
unsigned char c2 = (unsigned char)p_2;
unsigned long len = -1;
const ulong i_32 =32;
if (c1 >= 0xb0 && c2 >= 0xa1)
{
len = ((c1 - 0xb0) * 94 + (c2 - 0xa1)) * i_32;
}
if (c1 > 0x80 && c1 < 0xa1 && c2 >= 0x40) {
//len = ((c1 - 0x81) * 190 + (c2 - 0x40)) * i_32 + 6768 * i_32;
len = ((c1 - 0x81) * 190 + (c2 - 0x40)) * i_32 + 6768 * i_32;
if(c2>0x7e) len-=i_32;
}
if (c1 >= 0xaa && c2 >= 0x40 && c2 < 0xa1) {
len = ((c1 - 0xaa) * 96 + (c2 - 0x40)) * i_32 + (6768 + 6080) * i_32;
if(c2>0x7e) len-=i_32;
}
if (len >= 0)
return len;
/* if (c1 >= 0xa1 && c1 <= 0xa9 && c2 >= 0xa0)//0xa1
len = ((c1 - 0xa1) * 94 + (c2 - 0xa1)) * 32;
if (c1 >= 0xa8 && c1 <= 0xa9 && c2 >= 0x40 && c2 <= 0xa0)
len = ((c1 - 0xa8) * 94 + (c2 - 0x40)) * 32 + 846 * 32;
if (len >= 0)
return len;*/
}
以上程序是我在8位51单片机上写的,如果移植用注意变量INT型等的长度。函数内注释的部分也是用得到的,最好能通过GB18030资料弄清以上程序,这样提取字库才不会出问题.上面的函数是按照字库中汉字的顺序存储在存储器中的情况编写的,有些时候为了提取或是使用方便,也可将字库处理后再存储.
总的说:提取字库就是一个通过汉字代码算出偏移量,通过偏移量找到汉字在存储器位置的过程.
这里我讲的不是很详细,只是把我觉得有用的东西拿了出来,最好对没接触过字库的朋友有所帮助.
本想在最后的附件中上传gb18030的资料和gb18030字库查看软件的,不过上传文件有大小限制,如果有什么需要的,请回复本文章并留下E-MAIL,我会尽快把资料发给你的.我也会尽快将资料上传上来的.
https://static.assets-stash.eet-china.com/album/old-resources/2008/12/5/5fcd43c6-257d-4d35-a8c2-2c7e4b377412.rarhttps://static.assets-stash.eet-china.com/album/old-resources/2008/12/5/a9fec3a3-22d6-41aa-9a73-93d68b5c8337.rar
用户377235 2012-10-7 22:19
你好,我现在做个案子需要中文字库,麻烦传一份给我,谢谢,yannh33@163.com 谢谢了。
用户377235 2012-5-3 11:01
用户558117 2011-10-27 22:54
用户93574 2011-3-23 20:50
用户23619 2010-10-13 18:05
用户230035 2009-10-22 22:50
用户230035 2009-10-22 22:46
用户1481026 2009-9-25 20:13
求gb18030的资料和gb18030字库查看软件,最近在做16*16点阵的LED,希望能发给我些资料,谢谢!
用户227115 2009-7-13 09:39
用户1305670 2009-7-10 23:42