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

一、工具简介

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组值。

既可以在原有像素点修改颜色深浅值,也可以在空白处增加像素点,重绘这个字符。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdut_llkkyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值