LittlevGL 全新的 v5.1 版本正式发布,带来了大量更新,包括抗锯齿速度提升 4 倍、支持稀疏字体以节省亚洲字体的 ROM 空间、可缩放且美观的字体抗锯齿、图像像素级不透明度、易于使用的在线字体和图像转换器,以及显著的代码体积减少。
抗锯齿速度提升 4 倍#
由于对抗锯齿系统进行了大规模重构,其性能相比 v5.0 提升了 4 倍。这意味着抗锯齿几乎不会造成性能损失!在 v5.1 中,抗锯齿在渲染过程中实时计算,因此不再需要旧的"以双倍大小绘制所有内容再缩小"的方式。现在只需将少量像素放置在适当位置,即可使线条或曲线平滑均匀。
下图展示了使用基准测试应用程序对 v5.0 和 v5.1 进行的一些测量结果。结果以 FPS(帧率)表示。

| 设置 | v5.0 无抗锯齿 | v5.0 抗锯齿 | v5.1 无抗锯齿 | v5.1 抗锯齿 |
|---|---|---|---|---|
| 普通 | 101 | 23 | 125 | 91 |
| 壁纸 | 53 | 12 | 91 | 71 |
| 壁纸重着色 | 30 | 5 | 25 | 23 |
| 不透明度 | 84 | 16 | 83 | 83 |
| 阴影 | 38 | 4 | 39 | 34 |
| 全部启用 | 19 | 2 | 16 | 15 |
稀疏字体支持和新的字体抗锯齿系统#
为了在 v5.1 中生成字体,您可以使用全新的在线 TTF 字体转换工具。访问地址:https://littlevgl.com/ttf-font-to-c-array
使用此工具,您可以指定要转换的字符范围,还可以选择性地列出要包含在字体中的字符。这对于亚洲字体非常有用,因为在大型 Unicode 范围中通常只使用少数字符。
之前的 LV_FONT_ANTIALIAS 选项已从 lv_conf.h 中移除。现在您可以为每个字体指定 bpp(每像素位数)值(支持 1、2、4 或 8 bpp)。这样可以更好地自定义以节省内存(小字体使用高 bpp,大字体使用低 bpp),并且在相同字体内存占用的情况下通常能获得更好的效果。您可以使用 1、2、4 或 8 的值启用内置字体以指定其 bpp。
图像处理更新#
旧的色键透明(LV_COLOR_TRANSP 像素为透明)功能仍然可用,但还新增了一个特性:您可以为每个像素分配一个 Alpha 字节来实现像素级不透明度。与色键透明相比,具有像素级不透明度的图像可以拥有非常平滑的边缘。
为 LittlevGL 转换图像创建了另一个在线工具:https://littlevgl.com/image-to-c-array
在 v5.0 中,您需要在 RAMFS 中从图像数据创建文件,然后在 lv_img_set_file() 中使用文件路径。现在在 v5.1 中,引入了一种更通用且资源友好的方式。您可以使用 lv_img_set_src() 函数为图像对象设置新的源。图像源有 3 种:
- 编译到代码中的 C 数组。例如
lv_img_set_src(img1, &wallpaper_img)。在示例中,wallpaper_img 由在线转换器生成。 - 外部存储的二进制文件。例如
lv_img_set_src(img1, "S:/path/to/image.bin")。image.bin 也是由在线工具创建的,例如存储在 SD 卡上。 - 符号(作为文本):例如
lv_img_set_src(img1, SYMBOL_CLOSE)。
要了解更多信息,请查看有关图像的教程:https://github.com/littlevgl/lv_examples/tree/master/lv_tutorial/6_images
代码体积减少#
v5.1 可以在不到 50 KB 的空间内编译,内存使用仅 10 KB。在这种配置下,您可以使用几种对象类型(一个新对象类型需要约 3 KB ROM)和缓冲绘图(LV_VDB_SIZE 2048)。这使得 LittlevGL 能够在仅有 64 KB ROM 的简单廉价设备上运行,例如 STM32F103C8。
从 v5.0 迁移到 v5.1#
虽然这是一个次要版本,但在更新到 v5.1 时您需要做几件事:
- 从 lv_conf_templ.h 刷新您的 lv_conf.h
- 使用在线转换器重新生成您的图像和字体
所有新功能#
lv_refr_set_roundig_cb():设置一个函数来修改特殊显示控制器的无效区域lv_group_set_focus_cb():设置在新对象获得焦点时调用的函数 #94lv_obj_get_type()返回字符串,例如 "lv_slider"、"lv_btn" 等 #91- 字体处理扩展,用于有效的中文字体处理(自定义读取函数)
- 移除 LV_FONT_ANTIALIAS 并添加 BPP(每像素位数)字体:1、2、4 和 8
lv_img:添加像素级不透明度选项(ARGB8888 或 ARGB8565)- LV_ANTIALIAS 重构:意味着抗锯齿线条和曲线
- 将符号字体(基本、文件和反馈)合并为一个字体
lv_group:LV_COLOR_DEPTH 1 时使用不同的默认 style_mod 函数lv_img_set_src()用一个函数处理文件路径、符号和常量变量- LV_PROTECT_PRESS_LOST:防止输入设备在对象失去按压状态时找不到新对象
lv_label:如果启用 body_draw,则绘制 style.body.padding.hor/ver 更大的主体- LV_LAYOUT_PRETTY:在一行中将对象垂直对齐到中间
- 向 lv_indev_drv_t 添加用户数据选项,并通过 lv_indev_data_t 将其传递给读取函数 #115
- LV_GROUP_KEY_ENTER_LONG:在长按 LV_GROUP_KEY_ENTER 时由库发送,以触发对象的长按 #113
- LV_INDEV_TYPE_BUTTON:用于硬件按钮,按压屏幕上的某个点
Bug 修复#
lv_chart:修复 point_num 大于 256 的使用lv_label:动画时间未应用于 LV_LABEL_LONG_ROLLlv_txt_utf8_size修复 4 字节字符lv_slider:修复最小值不为零时的 knob_inlv_area_is_on:处理了一些错误情况lv_indev:缓冲的 indevs(在 indev_read 中返回 true)被当作非缓冲处理- 拖动:如果对象未移动则不使其失效
总结#
v5.1 带来了大量变更以满足您的需求,我们将继续为您添加新功能!如果您有想法或问题,请随时在 GitHub 上提问。别忘了为仓库点赞以获取新闻并成为社区的一员!
