VGL
先生成字库文件,可以用官方在线工具
图片转换: https://littlevgl.com/image-to-c-array
字体转换: https://littlevgl.com/ttf-font-to-c-array
也可以用下面的字体生成工具。
https://download.csdn.net/download/xinxiaoci/10905909
字体相关的结构体成员
static const uint8_t glyph_bitmap[]={……}; // 点阵数据
static const lv_font_glyph_dsc_t glyph_dsc[]={}; // 字体描述 {字体宽度,字体在点阵数中的起始索引值}
static const uint32_t unicode_list[] = {}; // 对应的Unicode编码
填充结构体
lv_font_t basics_chinese_21 =
{
.unicode_first = 32, /* Unicode 最小编码 */
.unicode_last = 65292, /* Unicode 最大编码 */
.h_px = 21, /* 字体高度 */
.glyph_bitmap = glyph_bitmap, /* 字体点阵数据 */
.glyph_dsc = glyph_dsc, /* 字体点阵描述 宽度, */
.unicode_list = unicode_list, /* 字库所包含的Unicode编码列表 */
.get_bitmap = lv_font_get_bitmap_sparse, /* littlevgl 自带函数 */
.get_width = lv_font_get_width_sparse, /* littlevgl 自带函数 */
.bpp = 4, /* 抗锯齿 */
.next_page = NULL, /* 字体扩展指针 */
};
在头文件中调用 LV_FONT_DECLARE 宏声明自己定义的字体
LV_FONT_DECLARE(basics_chinese_21);
调用方法,在需要用到汉字的地方,创建新的样式 style ,在样式中修改字体,然后基于新样式创建对象。
void lv_chinese_fonts1(void)
{
/*concatenate the fonts into one*/
// lv_font_add(&arial_cyrillic_20, &arial_ascii_20); 相同高度才可以添加到一起
// lv_font_add(&arial_math_20, &arial_ascii_20);
/* 创建一个新的样式,并且修改新样式的文本字体 */
static lv_style_t style1;
lv_style_copy(&style1, &lv_style_plain);
style1.text.font = &basics_chinese_21; /* 设置自定义字体 */
/*Create a label and set new text*/
lv_obj_t * label = lv_label_create(lv_scr_act(), NULL); /* 创建标签 */
lv_obj_set_pos(label, 10, 10); /* 设置相对位置 */
lv_label_set_style(label, &style1); /* 设置样式 */
lv_label_set_text(label, "hello world!\n 世界你好,我是littleVGL!"); /* 显示汉字 */
}
在main函数中调用即可;
模拟器效果如下
相关阅读
使用各种嵌入式GUI时,总会遇到“汉字显示”“字体”这些关卡。 阅读本文前,最好已经了解Uincode,UTF-8,UTF-16,GBK,GB2312相关知识,