Micropython lvgl9.1显示中文

背景

Micropython lvgl默认是不支持展示中文的,需要加载字体才行。

加载字体的方法

全局加载方式

font_simsun_16_cjk = lv.binfont_create("S:/font.bin")
if font_simsun_16_cjk:
    # 方法1:设置全局默认字体样式
    default_style = lv.style_t()
    default_style.init()
    default_style.set_text_font(font_simsun_16_cjk)
    
    # 应用到屏幕,所有子组件都会继承
    scrn.add_style(default_style, 0)
    

局部加载方式

label.set_style_text_font(font_simsun_16_cjk, 0)

存在的问题

全量字体文件大多是上几M的,加载字体对小硬件来说是个不小的负担,加载很慢,几秒到十几秒的时间都用来加载字体,这对于嵌入式来说是不能接受的。

优化方法

我们可以为硬件上用到的文字单独生成一个字体库。

步骤一:安装工具

npm i lv_font_conv -g

步骤二:下载个ttf字体
https://www.fonts.net.cn/font-37310347287.html

步骤三:执行生成命令

lv_font_conv \
  --size 20 \
  --format bin \
  --bpp 1 \
  --font b.ttf \
  --symbols "硬件里面要展示什么1234567890AI " \
  --no-compress \
  -o font.bin

这里注意字体文件一定要是ttf的,symbols就是要展示什么字就写什么字,空格算字体。正常的情况下就能生成font.bin的文件。

推荐阅读

<think>好的,用户想了解LVGL9.1版本中矢量绘图的使用方法或实现方式。首先,我需要回忆一下LVGL的文档和相关知识。LVGL是一个轻量级的嵌入式图形库,矢量绘图功能在9.1版本中可能有所增强或调整。用户之前提到的引用内容里提到了LV_DRAW_TASK_TYPE_VECTOR,这可能与矢量绘图相关,但需要确认是否正确。 首先,我应该从LVGL的基本结构入手,矢量绘图通常涉及创建对象并设置其属性。比如,使用矢量对象需要特定的API,可能需要用到lv_vector_path等函数。然后,需要说明如何配置路径、设置填充和描边属性,以及如何渲染到屏幕上。接下来,我得检查LVGL9.1的更新日志或文档,确认矢量绘图的具体实现方式是否有变化。例如,是否引入了新的API或修改了现有函数。同时,用户可能需要示例代码来演示如何使用这些功能,所以需要提供一个简单的例子,比如绘制一个矩形或贝塞尔曲线。 另外,用户可能关心性能优化或实际应用中的注意事项,比如内存管理和坐标系统。这部分也应该涵盖在回答中,确保信息的全面性。最后,生成相关问题时要围绕矢量绘图的使用、性能、与其他图形任务的区别以及动画结合等方面。</think>在LVGL 9.1中,矢量绘图功能通过$lv_vector$模块实现,支持路径构建、图形填充/描边、贝塞尔曲线等矢量操作。以下是关键实现步骤和使用方法: ### 一、矢量对象创建 ```c lv_obj_t *vector = lv_vector_create(lv_screen_active()); lv_vector_set_size(vector, 200, 200); // 设置画布尺寸 ``` ### 二、路径构建 使用$lv_vector_path$接口定义图形路径: ```c lv_vector_path_t *path = lv_vector_path_create(); lv_vector_path_move_to(path, 10, 10); lv_vector_path_line_to(path, 100, 50); // 直线路径 lv_vector_path_quad_to(path, 120, 120, 150, 80); // 二次贝塞尔曲线 ``` ### 三、样式配置 $$ \begin{cases} \text{填充颜色:} & \text{lv_vector_set_fill_color(vector, LV_COLOR_RED)} \\ \text{描边宽度:} & \text{lv_vector_set_stroke_width(vector, 3)} \\ \text{渐变效果:} & \text{lv_vector_set_fill_gradient(vector, LV_GRADIENT_HOR)} \end{cases} $$ ### 四、图形渲染 ```c lv_vector_draw_path(vector, path); // 执行绘制命令 lv_vector_path_delete(path); // 释放路径内存 ``` ### 五、坐标转换 支持矩阵变换: $$ \begin{bmatrix} s_x & 0 & t_x \\ 0 & s_y & t_y \\ 0 & 0 & 1 \end{bmatrix} $$ ```c lv_matrix_t matrix; lv_matrix_identity(&matrix); lv_matrix_rotate(&matrix, 45); // 旋转45度 lv_vector_set_transform(vector, &matrix); ``` ### 六、性能优化 1. 复用路径对象减少内存分配 2. 使用$lv_vector_cache$缓存高频图形 3. 开启$LV_VECTOR_ANTIALIAS$抗锯齿配置 [^1]: 引用自LVGL官方文档的绘制任务类型说明,其中$LV_DRAW_TASK_TYPE_VECTOR$对应矢量图形绘制任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值