1. 程式人生 > >emwin字型檔製作及漢字顯示

emwin字型檔製作及漢字顯示

備註:工具是nxp官方釋放出來的,可以到連結下載:http://download.csdn.net/download/armwind/10103643
  最近在研究emwin字型顯示部分,但由於無法看到原始碼,也不知道emwin是如何實現的。也算是看葫蘆畫瓢,記錄下字型檔製作過程。
目前我本地使用的工具集合如下所示,對應emwin5.12,不過除了GUIBuilder.exe需要小更新外,其它都是通用的。可在下面連結地址下載

這裡寫圖片描述

一、生成完整字型檔

  • 1.安裝setupFontCvt_V318.exe(http://download.csdn.net/download/armwind/10103643

    ),安裝之後開啟軟體之後讓你選擇編碼型別和是否需要抗鋸齒選項,具體如下所示:

    這裡寫圖片描述

    上面我們選擇standard,16bit unicode編碼,然後點選OK

    • 2.緊接著彈出下面這個視窗,這裡我選擇宋體,常規,20X20的字型

      這裡寫圖片描述

      然後點選確定

    • 3.這個時候彈出的就是包含所有字型檔的編碼介面。如果這個時候直接點選File->sava,則會儲存所有字型檔,這字型檔比較大,大概22M.

      這裡寫圖片描述

      這樣儲存的檔案就是我們所有的字型檔了,不過一般嵌入式裝置flash空間有限,無法存放這麼大的字型檔,那麼我們就需要精簡字型檔,只製作我們需要字型字型檔。

二、生成制定字型字型檔(縮小體積)

  • 1.緊接著上面的操作,我們需要把所有字型遮蔽掉,操作如下所示:
    這裡寫圖片描述

    這裡我們以顯示“科學”為例子,這裡“科”的unicode編碼是79d1,這樣我們就去79D0,如下圖所示,然後偏移為1的地方就是“科”,點選滑鼠右鍵,使能該字。然後”學”也是這樣的操作,最後File->save,就得到“科學”的字型檔了。
    這裡寫圖片描述

    提示:這裡我要顯示的字型是“科學”,通過網頁將“科學”轉意成unicode編碼。我是在這個網站轉的http://tool.chinaz.com/tools/unicode.aspx
    ,可以發現“科學”對應的uicode編碼是:\u79d1\u5b66(十六進位制)
    這裡寫圖片描述

三、字型檔燒錄進flash顯示

  • 1.emwin的的所有字型組成一個單鏈表,這樣就方便查找了。下面是上面的”科學”的字型檔,最後暴露給emwin的就是GUI_FontFrontSong_20X20,那這樣的話,我這裡想到一種方案“動態生成字型檔”。即:把所有字型檔燒錄到外部flash中,當需要顯示字時,根據unicode編碼,從flash讀出需要顯示字的字型檔(需要根據unicode編碼計算字型檔偏移),動態生成一個字型檔,設定給emwin。這樣的話就不會暫用太多ram,就是影響了一些效率,不過另外一方面節省了查詢字型檔的時間,應該不會浪費太多時間。目前本地還沒實驗。
GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontFrontSong_20X20_Prop2 = {
   0x79D1 /* first character */
  ,0x79D1 /* last character  */
  ,&GUI_FontFrontSong_20X20_CharInfo[  1] /* address of first character */
  ,(GUI_CONST_STORAGE GUI_FONT_PROP *)0 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontFrontSong_20X20_Prop1 = {
   0x5B66 /* first character */
  ,0x5B66 /* last character  */
  ,&GUI_FontFrontSong_20X20_CharInfo[  0] /* address of first character */
  ,&GUI_FontFrontSong_20X20_Prop2 /* pointer to next GUI_FONT_PROP */
};

GUI_CONST_STORAGE GUI_FONT GUI_FontFrontSong_20X20 = {
   GUI_FONTTYPE_PROP /* type of font    */
  ,20 /* height of font  */
  ,20 /* space of font y */
  ,1 /* magnification x */
  ,1 /* magnification y */
  ,{&GUI_FontFrontSong_20X20_Prop1}
  ,17 /* Baseline */
  ,9 /* Height of lowercase characters */
  ,13 /* Height of capital characters */
};