LVGL 像文字一样,显示任意自定义符号

本文介绍了如何利用LVGL的多语言转换工具MCU_Font_Release在汽车仪表盘等场景下,自定义添加带有特定符号且支持颜色变化的字体。作者分享了LVGL代码修改过程,包括添加图片符号、调整宽度和坐标信息等内容。

 颜色可以在程序中设定,符号的C数组生成

有牛人谢了更好地文章和工具,请查阅:

 

LVGL的多语言转换工具--MCU_Font_Releaseicon-default.png?t=N7T8https://www.21ic.com/a/934468.html

吴斌 / MCU_Font_Releaseicon-default.png?t=N7T8https://gitee.com/WuBinCPP/MCU_Font_Release

这种应用非常适合类似汽车仪表盘中,有很多行业内特定符号需要显示的场景,而且符号需要根据情况改变颜色。网上这方面基本没有资料,本文是作者根据LVGL自定义字库的源代码修改来实现的。

使用工具:

设置:(根据液晶屏不同可能不同)

LVGL代码手动更改

在之前生成的自定义字体文件内:

  1. 在glyph_bitmap中添加图片符号或者文字数据
  2. 修改glyph_dsc中需要显示符号的信息:
    1. bitmap_index:数据在glyph_bitmap中的偏移量
    2. adv_w符号的宽度
    3. box_h,box_w:符号显示的外围框的高和宽(想象文字大小小于框)
    4. ofs_x,ofs_y:符号在显示框中的坐标信息
  3. 修改unicode_list_1:在相应的显示内容中输入这里的字符就会显示真实的符号(这里的字符指向数据中的符号)
  4. 修改lv_font_fmt_txt_cmap_t中的信息:
    1. range_start:unicode_list_1中第一个
    2. range_length:unicode_list_1中最后一个
    3. list_length一共有多少个符号
  5. 修改myFont
    1. line_height//这里限定了一系列文字(或者图标之中最高的显示高度)

具体自定义字库如何在LVGL内添加,网上太多了,可以找来自己看。

### 显示特殊符号的配置方法 要在LVGL框架中正确显示特殊符号,通常需要考虑以下几个方面: #### 字体支持 为了能够正确渲染特殊符号,所使用的字体文件必须包含对应的字符集。如果目标设备上的字体不支持某些特殊符号,则即使启用了相关功能也无法正常显示这些符号[^1]。 ```c // 设置自定义字体以支持更多字符集 static lv_font_t * custom_font; custom_font = lv_font_load("path_to_custom_font_file"); // 加载带有扩展字符集的字体 lv_obj_set_style_text_font(obj, custom_font, LV_PART_MAIN); // 将对象的文字样式改为新字体 ``` #### 配置语言环境 对于一些特定的语言(如阿拉伯语),除了基本的字体外还需要额外的支持才能让文字按照预期呈现出来。例如,在阿拉伯文中启用连笔效果就需要调整`lv_conf.h`里的相应选项[`LV_USE_ARABIC_PERSIAN_CHARS`]设为1。 #### 特殊编码处理 当涉及到非ASCII范围内的字符时,可能还要注意源码本身的保存格式以及编译过程中字符串常量的实际表示方式等问题。确保所有的开发工具链都统一采用UTF-8作为文本存储标准可以有效减少乱码现象的发生几率[^2]。 ```c const char* special_char_string = u8"你好، مرحبا!"; // 使用u8前缀声明utf-8编码串 lv_label_set_text(label, special_char_string); ``` 以上就是关于如何在LVGL项目里展示各种复杂或者特殊的字符的一些指导原则和技术细节分享。 ### 示例代码片段 下面给出一段简单的例子用来演示怎样在一个标签控件上显示出含有多种不同种类字符组成的短句: ```c #include "lvgl/lvgl.h" void setup_special_symbols(lv_obj_t *parent){ const char* text_with_symbols = u8"Special Symbols: @#$%^&*()_+-=[]{}|;':\",./<>?¡¿"; static lv_style_t style; lv_style_init(&style); // Load a font that supports the required symbols static lv_font_t *symbol_font = lv_font_load("path/to/symbol/font"); lv_style_set_text_font(&style, symbol_font); lv_obj_t *label = lv_label_create(parent); lv_label_set_text(label, text_with_symbols); lv_obj_add_style(label, &style, 0); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值