Littlevgl 显示汉字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinxiaoci/article/details/86136793

先生成字库文件,可以用官方在线工具

图片转换: 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函数中调用即可;

模拟器效果如下

猜你喜欢

转载自blog.csdn.net/xinxiaoci/article/details/86136793