shell编程/字库裁剪(1)——想法

  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  http://www.cnblogs.com/Colin-Cai/p/7679024.html 

  作者:窗户

  QQ:6679072

  E-mail:6679072@qq.com

  我勾勒是帖子的用意,在于三个:

  1.用代码生成代码的合计。

  2.shell编程的笔触。

  3.裁剪字库的实际程序。

  

  我打算分为三节以来:

  第一节省讲裁剪词库的义与用场所;

  第二省讲什么样用shell来解决这个题材;

  第三节约讲什么测试结果。

  很多涵盖点阵液晶的硬件项目或用展示汉字、ASCII字符,有的降价的液晶里没有字库,有的液晶里带有了字库但或许要另字体的支持。这种时候我们就是需要运用外置的字库了。一般一个字库需要几百K大小,当然对生外置flash的状态下向不算什么,但有点时候我们当设计硬件的时段是因为硬件成本、PCB尺寸等元素考虑,并无会见利用外部存储,现在之嵌入式处理器公司还见面以SOC上为得之flash,足够你健康的编程使用,比如我们耳熟能详的STM32多重,它由ST公司(意法半导体)出品的基于ARM的SOC,有着和谐之对立统一的开发库,可选器件品类繁多,是裸机运行的首选。

  SOC上之flash一般尺寸相对大有些,几百K的字库很可能超标,甚至自己就是没这样好。那么当这种情形下,如果还眷恋利用字库,只好对字库进行裁剪,这吗是笔者之主题的背景情况。当然,也会发FPGA来支配液晶、VGA等气象的时刻啊用淘汰剪字库,但未以自己此的设想范围外,我是题材就是本着C语言编程。

  我们来试想一下,对于ASCII码,即便是16X8底字库,总共为不怕2k无至,基本好了受下来,所以最主要考虑裁剪的凡汉字。如果是一体化的汉字字库,那么显示汉字可以一直冲GB2312码来算有二前进制编码,这个可以baidu里面找GB2312字库的摇,里面可以查到很多篇好证实GB2312字库的摆,细节无在此地讨论。直接写结果,GB2312的编码为有限单字节,假设有汉字的GB2312编码第一只字节为GBH,第二只字节为GBL,并且每个字字体在字库中之大大小小为s,那么这字在字库中的皇为

  offset = [ (GBH – 161) * 94 + (GBL –
161) ] * s

  一般采用的凡16X16配库,那么s=16*16/8=32,当然为来动外大小,比如12X12,那么s=12*12/8=18。

  如果要就此到繁体字,那么可以运用GBK编码和GBK字库,公式类似,本文就考虑GB2312。

  于现实使用中,可以对此拥有应用的字C语言按照编码大小顺序提取,生成一个数组;然后来些许种缓解智:

  1.重新建立一个所利用汉字编码大小顺序的雷打不动数组,在物色汉字字体的上用二分割查找法找到汉字编码在屡组被的偏移ofs,从而知道所选择字体在书数组中的偏移ofs/2*s。

  2.将程序中的方块字都替换成偏移,这可以变换来重新快的运转速度(虽然才抢了那微小的一点点)和重复快的存储,但最终是盖献身程序可读性为前提的,所以一般情形下非建议如此,代码不仅仅是深受机器读吧是如果让人朗读之。