字库模块#

基本信息#

  • 起草日期: 2022-03-15

  • 设计人员: chenxuuu

已知问题#

目前已有的字库字体大小不统一、刷新较慢,且自定义字体困难。需要一个通用的点阵字体库

需要实现的目标#

  • 可通过c接口获取指定字体的某个字的点阵信息

  • 使用UTF16编码(定长)

  • 配套上位机,可方便地生成字体代码进行添加。尽量做成网页版

  • 提供Lua接口,可从Lua层获取某个字体的点阵信息

  • 支持从文件系统加载字体的方式,上位机也要支持生成此类在字体文件

  • 支持灰度,待定,没想到实现方法

  • 矢量字体,待定,没想到实现方法

解决方案#

lua的接口#

--思源黑体16px
local data,width,height = font.get(font.SOURCE_SANS_16,"测")
local data,width,height = font.get(font.SOURCE_SANS_16,"测试")

c接口#

typedef struct luat_font {
    uint8_t* addr; //数据存储的地址
    size_t start;  //编码开始的位置
    size_t len;    //一共多少个字
    uint16_t width; //字体宽度
    uint16_t height;//字体高度
} luat_font_t;

//返回的指针直接指向rom区域,不用free
uint8_t* luat_font_get(L_Font* font, uint16_t c, uint16_t* width, uint16_t* height, uint32_t* size);

相关知识点#