NXP

emwin字库制作及汉字显示

2019-07-12 14:01发布

备注:工具是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编码是:u79d1u5b66(十六进制)
    这里写图片描述

三、字库烧录进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 */ };