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了。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wincemobile/archive/2009/01/20/3839787.aspx
PS:
先翻譯MSDN中關于鏈接字體的解釋:
Windows Embedded CE提供了鏈接字庫的能力,它可以將一個或多個字庫鏈接到另一個字庫上,前者稱為被鏈接字庫,后者稱為基本字庫。一旦你鏈接了字庫,你就可以使用被鏈接的字庫顯示在基本字庫中不存在的碼字。比如,將日文字庫鏈接到拉丁字庫,你就可以在使用拉丁字庫的UNICODE文本API中顯示日文字符。
如果你的設備上啟用了字庫鏈接,你可以通過檢查注冊表的子鍵HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontLink/SystemLink來確定被鏈接的字庫到基本字庫的映射關系,下面的代碼示例了如何在注冊表中添加一個鏈接:
<base font name> = <path and file of linked font>, <name of linked font>
使用字庫鏈接時,你可以規定一個或多個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"
?
kandi備忘:
選擇SimSun & NSimSun (Subset 2_50)不能正常顯示繁體字,選擇SimSun & NSimSun (Subset 2_70)才可以正常顯示簡體和繁體字,不過后者比前者生成的NK大概大3.45MB。
總結
以上是生活随笔為你收集整理的WinCE内核裁减(中文字体)及字库和内核的分离(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wince 添加中文字库
- 下一篇: WINCE下创建多个文件分区