备注:工具是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 */
};
原文:https://blog.csdn.net/armwind/article/details/78441556