试用 LVGL Pro,一套完整的工具包,助您高效构建、测试、分享和交付 UI!
LVGL
版本发布

LVGL v5.1 - 抗锯齿速度提升 4 倍,支持稀疏字体

重大性能更新,抗锯齿速度提升 4 倍,支持亚洲语言稀疏字体,像素级不透明度,代码体积减少 50%。

加博尔·基什-瓦莫希加博尔·基什-瓦莫希8 分钟阅读

LittlevGL 全新的 v5.1 版本正式发布,带来了大量更新,包括抗锯齿速度提升 4 倍、支持稀疏字体以节省亚洲字体的 ROM 空间、可缩放且美观的字体抗锯齿、图像像素级不透明度、易于使用的在线字体和图像转换器,以及显著的代码体积减少。

抗锯齿速度提升 4 倍#

由于对抗锯齿系统进行了大规模重构,其性能相比 v5.0 提升了 4 倍。这意味着抗锯齿几乎不会造成性能损失!在 v5.1 中,抗锯齿在渲染过程中实时计算,因此不再需要旧的"以双倍大小绘制所有内容再缩小"的方式。现在只需将少量像素放置在适当位置,即可使线条或曲线平滑均匀。

下图展示了使用基准测试应用程序对 v5.0 和 v5.1 进行的一些测量结果。结果以 FPS(帧率)表示。

v5.0 和 v5.1 性能对比,显示抗锯齿速度提升 4 倍
v5.0 和 v5.1 性能对比,显示抗锯齿速度提升 4 倍
设置v5.0 无抗锯齿v5.0 抗锯齿v5.1 无抗锯齿v5.1 抗锯齿
普通1012312591
壁纸53129171
壁纸重着色3052523
不透明度84168383
阴影3843934
全部启用1921615

稀疏字体支持和新的字体抗锯齿系统#

为了在 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():设置在新对象获得焦点时调用的函数 #94
  • lv_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_ROLL
  • lv_txt_utf8_size 修复 4 字节字符
  • lv_slider:修复最小值不为零时的 knob_in
  • lv_area_is_on:处理了一些错误情况
  • lv_indev:缓冲的 indevs(在 indev_read 中返回 true)被当作非缓冲处理
  • 拖动:如果对象未移动则不使其失效

总结#

v5.1 带来了大量变更以满足您的需求,我们将继续为您添加新功能!如果您有想法或问题,请随时在 GitHub 上提问。别忘了为仓库点赞以获取新闻并成为社区的一员!

关于作者

加博尔·基什-瓦莫希
加博尔·基什-瓦莫希

LVGL 创始人

LVGL 的创始人和首席开发者,这是一个被全球数百万设备使用的开源嵌入式图形库。

认识博客背后的作者们

了解那些分享 LVGL 知识的优秀作者们

查看作者

订阅我们的通讯 不错过任何关于 LVGL 的新闻。我们每月最多发送 2 封邮件。

LVGL

LVGL 是最受欢迎的免费开源嵌入式图形库,支持任何 MCU、MPU 和显示类型,助您构建精美的用户界面。

我们还提供 UI 设计、实现和咨询等服务。

© 2026 LVGL。保留所有权利。
YouTubeGitHubLinkedIn