合宙Air724UG LuatOS-Air lvgl7-font(外部字体)

如何用开发板实现lvgl加载外部字体功能

目录名称

简介

LVGL API 字体

材料准备

  1. EVB_Air724UG_A13开发板一套(其他合宙支持LuatOS-Air开发版也可以),包括天线SIM卡,USB线,ST7735屏。
  2. LuatOS-Air开发环境:环境搭建方法

    image.png

步骤

这里我们用lv_font_conv生成外部字体

安装lv_font_conv

首先安装nodejs(点击这里下载对应安装包)这里不做介绍,下载安装即可

打开cmd运行

npm i lv_font_conv -g

即可安装好lv_font_conv
我们cmd运行lv_font_conv测试
 

image.png


显示如上内容,证明lv_font_conv 已正常运行

lv_font_conv命令介绍

常用命令:

扫描二维码关注公众号,回复: 16703990 查看本文章
  • --bpp - 每像素位数(抗锯齿)
  • --size - 输出字体大小(像素)
  • -o--output- 输出路径(文件或目录,取决于格式)
  • --format - 输出格式
    • --format dump - 转储字形图像和字体信息,用于调试
    • --format bin- 以二进制形式转储字体(如规范中所述
    • --format lvgl- 以LittlevGL格式转储字体
  • --force-fast-kern-format- 始终使用更快速的 kering 存储格式,但要付出一定的代价。如果出现尺寸差异,则会显示出来
  • --lcd - 生成具有 3 倍水平分辨率的位图,用于子像素平滑
  • --lcd-v - 生成具有 3 倍垂直分辨率的位图,用于子像素平滑
  • --use-color-info- 尝试使用字体中的字形颜色信息来创建灰度图标。由于灰色色调是通过透明度模拟的,因此仅在对比背景上效果会很好
  • --lv-include- 仅与--format lvgl,为 设置备用路径lvgl.h

字体命令:

  • --font- 字体文件的路径(ttf/woff/woff2/otf)。可多次用于合并
  • -r--range- 单个字形或范围 + 可选映射,属于先前声明的--font. 可以多次使用。例子:
    • -r 0x1F450 - 单值、十进制或十六进制格式
    • -r 0x1F450-0x1F470 - 范围
    • -r '0x1F450=>0xF005' - 带有映射的单个字形
    • -r '0x1F450-0x1F470=>0xF005' - 带映射的范围
    • -r 0x1F450 -r 0x1F451-0x1F470 - 2个范围
    • -r 0x1F450,0x1F451-0x1F470- 同上,但定义为 single -r
  • --symbols- 要复制的字符列表(而不是 中的数字格式-r
    • --symbols 0123456789., - 提取字符以显示数字
  • --autohint-off - 不要强制自动提示(默认情况下“灯”是打开的)
  • --autohint-strong - 使用更强大的自动提示(会破坏字距调整)

其他调试选项:

  • --no-compress - 禁用内置 RLE 压缩
  • --no-prefilter - 禁用位图线过滤器(XOR),用于提高压缩率
  • --no-kerning - 删除字距调整信息以减小大小(不推荐)
  • --full-info - 不要缩短“font_info.json”(包括像素数据)

我们输入以下命令即可生成我们想要的.bin外部字库了

lv_font_conv --no-compress --format bin --font D:\8910\lvgl\Font-OPPOSans\OPPOSans-B.ttf -o D:\8910\lvgl\myfontd\opposans_b_20.bin --bpp 4 --size 20 -r 0x30-0x39 -r 0x41-0x5A -r 0x61-0x7A

这里是通过OPPOSans-B.ttf 字库生成opposans_b_20.bin模块加载字库,由于空间有些这里只是生成了1-9数字A-Z大小写字母

字体使用

    -- 创建标签
    label = lvgl.label_create(lvgl.scr_act(), nil)
    lvgl.label_set_text(label,"TEST1234") 
    -- 加载外部字体
    local font = lvgl.font_load("/lua/opposans_b_20.bin")
    lvgl.obj_set_style_local_text_font(label, lvgl.LABEL_PART_MAIN, lvgl.STATE_DEFAULT, font)

测试固件和脚本

LuatOS-Air_V3201_RDA8910.pac
lvgl7-font.7z

显示效果

默认字库显示效果
 

image.png


外部字体显示效果

image.png

参考文档

LuatOS-SoC之LVGL字体篇

常见问题

字库添加中文字符的方法

添加中文字符用的是Unicode码,比如要添加"中文"这个两个字符到字库,只需要在命令行指定这个字符的Unicode即可,以下命名是在上面命令的基础上添加"中文"2个字符的命令

lv_font_conv --no-compress --format bin --font D:\8910\lvgl\Font-OPPOSans\OPPOSans-B.ttf -o D:\8910\lvgl\myfontd\opposans_b_20.bin --bpp 4 --size 20 -r 0x30-0x39 -r 0x41-0x5A -r 0x61-0x7A -r 0x4E2D -r 0x6587

这里0x4E2D 是“中”的Unicode码,0x6587是“文”的Unicode码

用下面的2个文件替换上面脚本中对应的文件,即可显示如下效果
opposans_b_20.bin
widget.lua

undefined

权限不够报错问题

cmd 必须管理员权限,要生成的 .bin文件和用到的.ttf字库所在目录要有user用户写权限
例如:
 

6972b762-8bc1-4d4e-9a0c-2c869e562fdd.png


出现如上错误,需要用管理员权限

要生成的 .bin文件和用到的.ttf字库所在目录权限如下:
 

image.png


如权限不够会报如下错误:

image.png

相关资料以及购买链接

猜你喜欢

转载自blog.csdn.net/l531798151/article/details/132840340