LVGL学习(1):中文字体的转换和汉字显示

文章介绍了如何在LVGL图形库中转换和使用中文汉字。首先,可以通过GUIGuider软件自动转换字体,导入ttf/woff/woff2格式的字体文件,或者将其他格式如otf改为ttf导入。GUIGuider能自动生成所需汉字的.c文件。其次,LVGL官网提供的在线转换工具可按需转换汉字。在字体使用时,需要包含相应的.h文件,并在代码中设置字体样式以显示中文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用LVGL的过程中,我们难免需要显示汉字,所以这篇文章就来介绍一下如何转换中文汉字并成功显示到LVGL中。

1 字体转换

1.1 GUI Guider自动转换

打开GUI Guide,创建一个工程,然后在Resource Manager中,可以看到GUI Guider自带了很多字体,如下图所示:
在这里插入图片描述
我们就可以在这里导入我们需要显示的字体,点击Import Font,选择自己的字体文件即可。但是这里字体文件仅支持ttf/woff/woff2三种格式。但是经过我的测试,你可以直接将otf等字体的后缀名改为ttf导入,一样是可以使用的。
这里还有一个Generate Font选项,你可以选择字体和字号,然后输入你要生成的字,就当作字符串一样输入到word中,就会自动生成转换后的.c文件到generated目录下。但实际上我一般不这么用。
在这里插入图片描述
对于我来说,我采用GUI Guider来设计我的每个UI界面,我没有采用GUI Guider生成的每个页面的代码结构,但是UI界面生成的配置代码是完全可以直接复制使用的。对于我们的应用来说,大概率不需要显示一些随机的中文汉字,而是显示一些固定的汉字,比如标签名,按钮名等。如下图所示,GUI界面中有一个标签和按键,我们可以在右侧属性中设置其对应的字体和字号(相同字体的不同字号都有各自的字体文件)。
在这里插入图片描述
这样在我们使用GUI Guider生成代码之后,在工程目录下的/generated/guider_fonts中就出现了lv_font_montserratMedium_16.clv_font_simsun_16.c两个字体文件,这两个字体文件会根据我们设计的GUI中所有出现的字进行转换,即你使用的字会自动进行转换,这样就不需要我们手动去看我们所有的界面中使用了哪些文字,然后用后面的转换工具一个个字/字号都要进行转换了,包括后期如果觉得字体太小或太大,修改都是非常方便的。所以这也是我常用的和推荐的转换方式。

1.2 在线转换

LVGL官方提供了一个在线字体转换的工具:Online font converter
一样的可以将字体文件转化成供LVGL使用的字体C文件。如下图所示,各个部分的含义参照注释:
在这里插入图片描述
对于Range来说,基本汉字的编码范围是0x4E00-0x9FA5,数字、拉丁字母、标点符号的编码范围是0x20-0x7E,但转换的越多,生成的字体文件就越大,所以还是推荐使用Symbols,即用到什么字就转换什么字。最后点击Convert即可生成转换后的字体C文件。

2 字体的使用

这里以GUI Guider生成的工程格式为例,在/generated/guider_fonts中有一个guider_fonts.h文件,里面就有你生成的字体的一些声明,实际上就是对特定字体数组的一个声明。

#ifndef GUIDER_FONTS_H
#define GUIDER_FONTS_H

#if LVGL_VERSION_MAJOR == 7
#include "lv_font/lv_font.h"
#else
#include "font/lv_font.h"
#endif

LV_FONT_DECLARE(lv_font_simsun_16)
LV_FONT_DECLARE(lv_font_montserratMedium_16)

#endif
#endif

对于lvgl自己支持的一些字体库来说,在lv_font.h中也声明了这些字体,它们都需要在lv_conf.h中使能才能使用:

#define LV_FONT_MONTSERRAT_8     0
#define LV_FONT_MONTSERRAT_10    0
#define LV_FONT_MONTSERRAT_12    1
#define LV_FONT_MONTSERRAT_14    0
#define LV_FONT_MONTSERRAT_16    0
#define LV_FONT_MONTSERRAT_18    0
#define LV_FONT_MONTSERRAT_20    0
#define LV_FONT_MONTSERRAT_22    0
#define LV_FONT_MONTSERRAT_24    0
#define LV_FONT_MONTSERRAT_26    0
#define LV_FONT_MONTSERRAT_28    1
#define LV_FONT_MONTSERRAT_30    0
#define LV_FONT_MONTSERRAT_32    0
#define LV_FONT_MONTSERRAT_34    0
#define LV_FONT_MONTSERRAT_36    0
#define LV_FONT_MONTSERRAT_38    0
#define LV_FONT_MONTSERRAT_40    0
#define LV_FONT_MONTSERRAT_42    0
#define LV_FONT_MONTSERRAT_44    0
#define LV_FONT_MONTSERRAT_46    0
#define LV_FONT_MONTSERRAT_48    0

所以在我们的显示界面的c文件中包含字体声明所在的头文件:

#include "guider_fonts.h"
或
#include "lv_font.h"

然后以一个label为例,设置其font属性即可,代码如下所示,其中lv_font_montserratMedium_16就对应我们刚刚声明的字体。

static lv_style_t style_file_label_1_main_main_default;
lv_style_set_text_font(&style_file_label_1_main_main_default, &lv_font_montserratMedium_16);
lv_obj_add_style(ui.label_1, &style_file_label_1_main_main_default, LV_PART_MAIN|LV_STATE_DEFAULT);
或
lv_obj_set_style_text_font(ui.label_1, &lv_font_montserratMedium_16, LV_PART_MAIN|LV_STATE_DEFAULT)

最后使用lv_label_set_text(ui.label_1, "按键")即可显示中文。当然对于GUI Guider来说,这些代码都已经生成好了,去对应窗口的文件中复制即可。

<think>好的,我现在需要帮用户解决如何在LVGL中实现字体放大的问题。首先,我应该回忆一下LVGL的相关知识,尤其是字体处理部分。根据用户提供的引用内容,他们可能已经完成移植,但需要调整字体大小。 首先,LVGL的字体系统支持内置字体外部字体。用户可能使用的是默认内置字体,这时候要放大可能需要更换更大的字体文件或者使用缩放功能。记得LVGL的字体配置通常在lv_conf.h文件中设置,用户提到引用[2]中的路径里有lv_conf_template.h,可能他们需要修改这个配置文件。 然后想到两种方法:一种是使用LVGL的字体缩放API,比如lv_obj_set_style_text_font()设置更大的字体,或者用lv_font_set_transform()进行缩放。另一种是加载外部字体文件,比如TrueType字体,这样可以灵活选择字号。不过外部字体需要先转换,使用工具如LVGL的在线字体转换工具。 需要注意用户可能对LVGL的配置流程不熟悉,需要详细说明修改lv_conf.h中的相关宏,比如启用LV_USE_FONT_COMPRESSEDLV_FONT_MONTSERRAT系列。同时,提醒用户如果使用外部字体,确保正确包含字体文件并注册到LVGL中。 此外,用户可能在移植过程中遇到路径或编译问题,需要检查字体文件的路径是否正确,配置是否启用。最后,示例代码会有帮助,比如创建样式并应用到标签对象,或者动态调整字体大小的事件处理。 还需要生成相关问题,比如如何添加自定义字体、动态调整字体的方法、字体放大后的显示问题,以及TrueType字体的使用。这些能帮助用户进一步探索相关主题。 总结步骤:确认用户已正确配置LVGL,检查字体相关设置,提供两种方法(API缩放外部字体),注意事项示例代码,最后相关问题扩展。</think>### 如何在LVGL中实现字体放大? #### 方法1:使用LVGL字体缩放API LVGL支持通过样式属性或API动态调整字体大小。以下是具体步骤: 1. **修改`lv_conf.h`配置** 确保启用字体扩展功能: ```c #define LV_USE_FONT_COMPRESSED 1 // 启用压缩字体支持 #define LV_FONT_MONTSERRAT_14 1 // 启用基础字体 #define LV_FONT_MONTSERRAT_20 1 // 添加更大字号 ``` 引用[^2]中提到的`lv_conf_template.h`需要同步修改[^2]。 2. **动态设置字体大小** 使用`lv_obj_set_style_text_font()`为对象指定不同大小的预加载字体: ```c lv_obj_t * label = lv_label_create(lv_scr_act()); lv_obj_set_style_text_font(label, &lv_font_montserrat_20, LV_STATE_DEFAULT); ``` #### 方法2:加载外部字体文件 对于更灵活的缩放,可使用TrueType字体转换工具: 1. **转换字体文件** 使用[LVGL在线字体转换工具](https://lvgl.io/tools/fontconverter),选择目标字号(如32px)并生成`.c`文件。 2. **集成自定义字体** 将生成的字体文件添加到工程中,并在代码中声明: ```c LV_FONT_DECLARE(my_font_32); // 声明外部字体 lv_obj_set_style_text_font(label, &my_font_32, LV_STATE_DEFAULT); ``` #### 注意事项 - 内存占用:大字号字体会显著增加Flash占用,建议仅加载必要字号[^1] - 动态缩放:LVGL 8.0+支持`lv_font_set_transform()`实现实时缩放,但可能影响渲染质量 - 多语言支持:中文字体需单独处理,建议使用外部字体生成工具 #### 示例:按钮点击放大字体 ```c static void btn_event_cb(lv_event_t * e) { lv_obj_t * label = lv_event_get_user_data(e); static uint8_t size = 14; size = (size == 14) ? 20 : 14; lv_obj_set_style_text_font(label, (size==14) ? &lv_font_montserrat_14 : &lv_font_montserrat_20, 0); } lv_obj_t * btn = lv_btn_create(lv_scr_act()); lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_CLICKED, label); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tilblackout

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

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

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

打赏作者

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

抵扣说明:

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

余额充值