WinCE内核裁减(中文字体)及字库和内核的分离(转)

发布时间:2011-2-28 10:33    发布者:lytdzyxgs
关键词: WINCE , 内核 , 字库
每次定制中文系统时,NK总是比英文大10M左右,启动时在bootloader中将内核Copy到内存时也花时间,同时也占用了很多内存,留给系统和应用的内存就少了10M左右,真是浪费呀,看到都心痛!本人研究了一下,同时也参考了网上的资料,现总结如下,如何减少中文字库大小和将字库放到外部存贮器上。核心思想是将默认选择的中文字体SimSun & NSimSun (SYSGEN_FONTS_SIMSUN)替换成SimSun & NSimSun (Subset 2_50) (SYSGEN_FONTS_SIMSUN_2_50)达到体积的缩小。在注册表中[HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\FontPath]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink \SystemLink]改变字库simsun.ac3或simsun.ttc的存贮位置。
一、减少中文字库大小
1.先打开目标的工程文件,单击“Platform”菜单,再单击“Settings…”,执行”clear” ,
Locales:将”英文(美国)”“中文(中国)”打勾
Default languare:选择“中文(中国)”
完成第1步后,工程中采用默认的是新宋字体
2,回到Catalog,选择“Core OS”—>“International”—>“Locale Spectific Support”
   —> “Chinese[Simplified]”
▲  Agfa AC3 Font Compression:使用AC3对字库进行压缩,若CPU有300HZ以上,建议选上;这个可以根据自己的需要选还是不选.
▲  SimSun & NSimSun (Subset 2_50):字体大小是3M左右,WINCE选择Subset 2_50是最合适的,所以用(Subset 2_50)中文字体替换原来的中文字体,选择SimSun & NSimSun (Subset 2_50),按右键添加该组件即可,这样就会把原来的字体替换掉。这样对中文显示又没有影响又达到内核瘦身的效果。必须选上;
补充:在没有压缩字体的情况来,默认选择的新宋字库大小是10M多,文件为simsun.ttc,若选择Subset 2_50版本,文件为simsun_2_50.ttc,字体大小是将近3M,也是对WinCE体积进行裁剪关键所在。当然如果选择了AC3对字库进行压缩,哪么体积还可以进一步缩小,压缩后的文件为simsun_2_50.ac3,体积就只有不到2M。
字库所在目录:D:\WINCE500\PUBLIC\COMMON\OAK\FILES
▲  GB18030 Data Converter:汉字编码标准集转换器,必须选上
3,重新进行Sysgen,这样做出来的系统,既能正常显示中文,又不用担心NK体积过大。
二、将字体保存到外部存贮器上来减少内核的大小
   网上有很多介绍将字体保存到SD卡、Flash等来减少内核的大小,但要注意一点就是:在加载显示驱动前就要加载保存字体的存贮设备的驱动,否则中文字体不能加载,系统启动后显示框框。将字体保存到注册表保存的存贮设备上,因为该存贮设备驱动很早就加载了。
而我使用的是硬盘,注册表需要作如下修改
1、在platform.reg中添加如下
[HKEY_LOCAL_MACHINE\SYSTEM\GDI]
    "FontLinkMethods"=dword:1
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontPath]
    "FontPath"="\\Hard Disk"  ; 字库文件所在目录
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SystemLink]
      "Tahoma"="\\Hard Disk\\simsun.ac3,NSimSun" ;我是用的压缩字库,所以为simsun.ac3。
      "Courier New"="\\Hard Disk\\simsun.ac3,NSimSun"
      "Arial"="\\Hard Disk\\simsun.ac3,NSimSun"
      "Times New Roman"="\\Hard Disk\\simsun.ac3,NSimSun"
      "Symbol"="\\Hard Disk\\simsun.ac3,NSimSun"
2、在工程目录中common.bib文件中删掉simsun.ac3相关项,确认该文件不会编到内核中。
3、把文件拷到Hard Disk中,即可,再启动就ok了。

PS:

先翻译MSDN中关于链接字体的解释:
Windows Embedded CE提供了链接字库的能力,它可以将一个或多个字库链接到另一个字库上,前者称为被链接字库,后者称为基本字库。一旦你链接了字库,你就可以使用被链接的字库显示在基本字库中不存在的码字。比如,将日文字库链接到拉丁字库,你就可以在使用拉丁字库的UNICODE文本API中显示日文字符。
如果你的设备上启用了字库链接,你可以通过检查注册表的子键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SystemLink来确定被链接的字库到基本字库的映射关系,下面的代码示例了如何在注册表中添加一个链接:
= ,
使用字库链接时,你可以规定一个或多个UNICODE字符必须从被链接字体中取,即使这些字符也存在于基本字库中。要指定被从基本字库中忽略的字符,你可以使用HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SkipTable注册表键,此键在操作系统启动时是只读的。
在下面的示例代码中,某字符的UNICODE编码为005c,虽然Tahoma字库中包含此码字,但仍然只使用被链接字库中的字符。
Tahoma=005c, 00a5, 007e, 0391-03c9, 2026, 2116, 221a, 25a0-25ff
当添加了中文字库支持时,实际上也就是将中文字库作为被链接字体使用的:
[HKEY_LOCAL_MACHINE\SYSTEM\GDI]
"FontLinkMethods"=dword:1
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SystemLink]
    "Tahoma"="\\Windows\\simsun.ac3,NSimSun"
    "Courier New"="\\Windows\\simsun.ac3,NSimSun"
    "Arial"="\\Windows\\simsun.ac3,NSimSun"
    "Times New Roman"="\\Windows\\simsun.ac3,NSimSun"
    "Symbol"="\\Windows\\simsun.ac3,NSimSun"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SkipTable]
    "Tahoma"="005c,00a5,007e,0391-03c9,2026,2116,221a,25a0-25ff"                   // 0391-03c9 is Greek chars.
    "Arial"="005c"
    "Courier New"="005c"
本文地址:https://www.eechina.com/thread-56127-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
she2010 发表于 2011-3-1 14:26:06
文章比较深奥。
youyou_zh 发表于 2011-3-11 21:17:30
kanbudong
lytdzyxgs 发表于 2011-4-6 14:54:40
很好的技术文章!
qingtai 发表于 2012-2-23 15:02:18
不错,顶起来!
小荷才露尖尖角 发表于 2012-3-14 15:53:21
好资料,分享
诚实12 发表于 2012-7-19 16:09:47
分享了!
daisukeyu 发表于 2012-11-30 15:55:13
来看看 谢谢分享
sinpo1984 发表于 2013-9-6 14:18:55
杭州立宇泰电子有限公司主营产品:MID、Andorid行业手持终端、车载驾培系统终端、警务通、嵌入式平板电脑、便携式无线电子菜单、多串口服务器、嵌入式单板电脑、S5PV210/S3C6410/2440/2410/44B0开发板及各种显示方案等自主知识产权的产品
诚实12 发表于 2014-2-20 13:51:58
好文章,楼主辛苦了
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表