一、工具简介
ucgui(emwin ) 提供了字体转换工具,可以将系统的字体转换成 GUI库所能理解的编码格式,供GUI 的API 调用。
二、ucgui 字体转换工具
ucgui 提供的字体转换是: uC-GUI-FontConvert-Demo.exe , 在网上下载的ucgui 包里能找到。
我目前遇到的情况是,用ucgui 自带的字体转换工具,转换出来的字体编码与实际不符,调用ucgui 的api 显示对应的字符,也异常。
2.1 对于普通非抗锯齿字符“1”,在工具上的显示是这样的:
2.2 转换出来的编码如下:
GUI_CONST_STORAGE unsigned char acFont____Light13_0031[ 13] = { /* code 0031 */
X__XXX_X,
X__X___X,
_XX_____,
_X_XX_XX,
X__XXX__,
XXX__X_X,
_XXXXXX_,
__X__XXX,
XXXX_XX_,
__XX_XX_,
X___X_XX,
_XX_XXXX,
_XXX_X__};
2.3 正确的编码应该是这样的:
/* DIGIT ONE */
GUI_CONST_STORAGE unsigned char acGUI_FontLight13_emwin_0031[ 13] = { /* code 0031 */
________,
___X____,
__XX____,
_X_X____,
___X____,
___X____,
___X____,
___X____,
___X____,
___X____,
___X____,
___X____,
________};
2.4 不再深究异常原因
这套ucgui 是在网上下载的,不知道中途那个过程缺失了,才导致工具转换出错。我找到替代方案了,新方案更优,所以不再深究这个异常。
三、使用Emwin 自带的Font Convert 工具
由于我之前有使用emwin 的经历,也了解ucgui 和emwin 的关系,尝试着用emwin font convert 转换字体,在ucgui 上面使用,果然能兼容,显示正常。
下面记录一下工具的使用过程。
3.1 打开软件,选择字体生成选项
选择生成的字体类型
Standard
只用一个位表示一个像素点
Antialiased,2bpp
抗锯齿字体,用2bits 表示一个像素点
Antialiased,4bpp
抗锯齿字体,用4bits 表示一个像素点
选择编码方式(Encoding)
编码方式根据自己显示内容选择,对我来说,只需要常规的英文字符,所以选择最后一个8/16 Bit SHIFT_JIS ,可以节省很多空间。
点击OK,进入下一步。选择字体参数
3.2 选择字体参数
点击确定,进入下一步。
3.3 字体编辑
到达这一步,如果不需要对字体做进一步编辑或压缩,可以直接另存在.c 文件,gui api 库就能直接使用这个字体文件。
四、基于Emwin 自带的Font Convert 工具,对字符进行编辑
4.1 剔除不需要的字符
由于单片机资源紧张,我们可以只转换需要的字符。例如,我们只需要字符0-9。我通常的做法如下:
4.1.1 Disable all characters
Views → Disable all characters 。除能所有的字符,字符列表栏所有字符变灰。
4.1.2 挑选我们需要的字符
单个字符选择
在字符列表栏,右键点击我们要选择的字符,选择Toggle character ,表示当前字符被选中。
选择一整行
在字符列表栏,右键点击我们要选择的字符那一行,选择Enable Block,表示当前行字符被选中。
按照范围选择
点击Edit → Enable Range of characters… ,输入我们要使能字符的开始,结束序号,表示当前范围的字符使能。
最左边的数字是当前行字符的起始序号。
4.2 删除字符中的空行
为了进一步压缩单片机的资源,可以把字符中的空白行删除掉,例如下图红色框的行。注意查看自己选择的字符,是否全部可以删掉前面4行,后面3行。
参照下图图标所示,选择从上面或下面删除对应的行数
4.3 对字符进行像素级修改
如上图所示,我们可以右键当前字符任意一个像素点,选择增加或减少当前像素点的颜色值,我们前面选择4bits 的深度,所以我们当前字符一个点有16组值。
既可以在原有像素点修改颜色深浅值,也可以在空白处增加像素点,重绘这个字符。
————————————————
版权声明:本文为CSDN博主「gdut_llkkyy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gdut_liujiangyi/article/details/127574534
|