LVGL显示中文汉字【看这一篇就够了】

最近在搞LVGL的显示,我这里用的是ESP32-S3+一块1.14寸的屏幕显示。移植的LVGL官方库为8.2.0。遇到一个lable显示中文时,却什么都不显示。最后查阅一番资料才实现的,实现效果如图:
在这里插入图片描述

话不多少,直接开搞:
总结起来就一句话:首先获取一个字体文件,然后利用字体转化器得到LVGL需要的字库即可。

  1. 第一步,获取字体文件:
    百问网,选择一个字体,比如我选择的:
    在这里插入图片描述
    下载下来之后解压。
  2. 打开LVGL字体转换器:https://lvgl.io/tools/fontconverter。
    在这里插入图片描述
    Bpp选择的越大,显示的字体越好看,但是也越占硬件资源,依情况而选就可以。
    在这里插入图片描述
    选择文件就选择刚刚下载的字体文件,然后Symbols中填入你要显示的字就可以了。点击convert。会生成一个.c文件,放入你的项目中即可。
  3. 代码改动:设置lable时:
    在这里插入图片描述
    需要注意:
    这句声明必须加,不然会报错,参数就是.c文件的文件名。
LV_FONT_DECLARE(lv_font_Chinese_siyun_blod);

最后,编译烧录就可以了。

在 ESP32-S3 上使用 LVGL 显示中文时,需要先将中文字符转换成对应的 Unicode 编码,然后再通过 LVGL 显示出来。下面是一个简单的示例代码,演示了如何将中文字符转换成 Unicode 编码并显示出来。 ```c #include "lvgl/lvgl.h" #include "lvgl/lv_font.h" void app_main() { // 初始化 LVGL lv_init(); // 创建一个屏幕对象 lv_obj_t *screen = lv_obj_create(NULL, NULL); lv_scr_load(screen); // 设置中文字体 lv_font_t *font = &lv_font_dejavu_16_cyrillic; lv_font_add(font, LV_FONT_FMT_TXT, NULL); // 显示中文字符 const char *chinese = "你好,世界!"; uint16_t unicode[LV_TXT_UTF8_SIZE(strlen(chinese)) + 1]; lv_txt_utf8_to_unicode(unicode, chinese, strlen(chinese)); lv_obj_t *label = lv_label_create(screen, NULL); lv_label_set_text(label, (const char*)unicode); lv_obj_set_pos(label, 50, 50); } ``` 在这个示例代码中,我们首先使用 `lv_font_add` 函数将中文字体添加到 LVGL 中。然后,我们将要显示中文字符转换成 Unicode 编码,使用 `lv_txt_utf8_to_unicode` 函数进行转换。最后,我们使用 `lv_label_create` 函数创建一个标签对象,并使用 `lv_label_set_text` 函数将转换后的 Unicode 编码设置为标签的文本内容,就可以在屏幕上显示中文字符了。 需要注意的是,在转换中文字符为 Unicode 编码时,我们使用了 `LV_TXT_UTF8_SIZE` 宏来计算 UTF-8 编码所需的缓冲区大小。这个宏定义在 LVGL 的 `lv_txt.h` 文件中,会根据字符串长度计算出 UTF-8 编码所需的缓冲区大小,并返回一个对应的大小值。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值