打印
[新唐博主]

ucgui 字体生成与字体个性化编辑

[复制链接]
644|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-11-15 10:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、工具简介
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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1364

主题

13994

帖子

8

粉丝