LVGL制作中文字体
时间: 2025-06-01 18:57:29 浏览: 46
### 如何在LVGL中实现中文显示
#### 字体生成工具
为了使 LVGL 能够支持中文字符的显示,可以利用官方提供的字体生成工具来创建自定义字体。该工具允许开发者将 TrueType (TTF) 或 Web Open Font Format (WOFF) 文件转换为适合嵌入式系统的 C 数组形式[^2]。
#### 编码转换注意事项
由于常用的中文字体通常采用 GB2312 编码标准,而 LVGL 所需的是 UTF-8 格式的字形数据,因此需要先完成从 GB2312 至 UTF-8 的编码转换过程[^1]。这一环节可以通过多种方式达成,比如借助专门软件或者脚本程序自动处理大量字符集映射关系。
#### 配置步骤概览
当准备好了适配后的字体资源之后,在项目源代码里声明所要应用的新字体对象,并通过设置样式属性指定给特定控件使用即可。例如下面这段演示代码展示了如何在一个标签组件上运用名为 `Font30` 的定制化汉字方案:
```c
#include "lv_font.h"
// 声明之前由工具生成并导入项目的字体变量
LV_FONT_DECLARE(Font30);
void lv_mainstart(void)
{
// 创建一个新的标签实例附加到当前屏幕活动区域
lv_obj_t *font_lable = lv_label_create(lv_scr_act());
// 设置此标签的文字风格为其关联新字体
lv_obj_set_style_text_font(font_lable, &Font30, LV_STATE_DEFAULT);
// 更新标签内容为一段含有中文字符的字符串
lv_label_set_text(font_lable, "简易数字万用表");
// 将该标签居中放置于父容器之中
lv_obj_center(font_lable);
}
```
值得注意的一点在于,如果更改了原始导出文件的名字,则必须确认内部引用保持一致;否则可能导致链接错误或其他异常情况发生[^3]。另外还需留意开发环境本身的文本保存格式设定——确保其默认选项设定了兼容 UTF-8 的模式,从而避免潜在的数据解析偏差引发界面渲染失败等问题同样重要。
### 示例:完整的流程说明
假设现在有一个需求是要让某个基于 Linux 平台运行的应用能够正常显示出包含繁体汉字在内的各种语言混合组成的短句“你好世界 Hello World”。以下是具体操作指南:
1. **挑选合适的字体素材**
- 访问 https://www.google.com/get/noto/ 下载覆盖范围广泛的 Noto Sans SC Regular 版本作为基础材料
2. **启动在线转换服务**
- 浏览至地址栏输入 https://lvgl.io/tools/fontconverter 后打开页面
3. **上传目标ttf文档**
- 使用界面上提供的功能按钮选取刚才下载下来的压缩包里的 .ttf 类型单个文件提交上去
4. **调整参数细节**
- 在弹出来的对话框里面勾选对应大小数值(如30px),同时激活高级选项卡下的子集筛选机制,手动录入期望保留的具体Unicode区间列表 `{...}`
5. **获取最终产物**
- 经过短暂等待后会得到一组新的头文件(.h)+二进制数组描述符(.c),将其妥善存放到工程目录下相应位置处
6. **集成进原有框架结构**
- 修改初始化函数部分增加必要的调用语句如下所示:
```c
extern const lv_font_t my_custom_chinese_font_30;
static void setup_ui() {
...
/* Assign custom font */
lv_theme_t* th = lv_theme_default_init(NULL, NULL, NULL, NULL, NULL);
lv_theme_set_current(th);
lv_disp_t *disp = lv_disp_get_default();
lv_disp_set_user_data(disp, &my_custom_chinese_font_30);
...
}
```
7. **验证效果呈现**
- 构建完成后重新部署镜像观察实际表现是否符合预期
阅读全文
相关推荐
















