feihongkld 发表于 2022-1-2 17:08:02

LVGL7.11 加载中文字库,无法正常显示

本帖最后由 feihongkld 于 2022-1-2 17:09 编辑


/* Optionally declare your custom fonts here.
* You can use these fonts as default font too
* and they will be available globally. E.g.
* #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \
*                              LV_FONT_DECLARE(my_font_2)
*/
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(myFont1)        //myfont1是字体名

/* Enable it if you have fonts with a lot of characters.


#define LV_USE_THEME_MONO      1

#define LV_THEME_DEFAULT_INCLUDE            <stdint.h>      /*Include a header for the init. function*/
#define LV_THEME_DEFAULT_INIT               lv_theme_material_init
#define LV_THEME_DEFAULT_COLOR_PRIMARY      lv_color_hex(0x01a2b1)
#define LV_THEME_DEFAULT_COLOR_SECONDARY    lv_color_hex(0x44d1b6)
#define LV_THEME_DEFAULT_FLAG               LV_THEME_MATERIAL_FLAG_LIGHT
#define LV_THEME_DEFAULT_FONT_SMALL         &lv_font_montserrat_16
#define LV_THEME_DEFAULT_FONT_NORMAL      &myFont1
#define LV_THEME_DEFAULT_FONT_SUBTITLE      &lv_font_montserrat_16
#define LV_THEME_DEFAULT_FONT_TITLE         &lv_font_montserrat_16

/*=================


已经设置了,可是无法正常显示,


void lv_ex_get_started_1(void)
{
          const char* str1 = "测试按钮";
          static lv_style_t style1;//style变量不能是局部变量,否则函数退出将销毁,绘制将会不正确
       
    lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);   /*Add a button the current screen*/
    lv_obj_set_pos(btn, 150, 10);                            /*Set its position*/
    lv_obj_set_size(btn, 120, 50);                        /*Set its size*/
    lv_obj_set_event_cb(btn, btn_event_cb);               /*Assign a callback to the button*/

       
    lv_obj_t * label = lv_label_create(btn, NULL);          /*Add a label to the button*/
          lv_label_set_text(label, str1);
       
          lv_style_init(&style1);
    lv_style_set_text_font(&style1, LV_STATE_DEFAULT, &myFont1);
    lv_obj_add_style(label, LV_LABEL_PART_MAIN, &style1);
}

void lv_chinest_test(void)
{
        static lv_style_t style2;
        lv_obj_t * label2;
       
        label2 =lv_label_create(lv_scr_act(), NULL);
        lv_obj_set_pos(label2, 250, 10);                            /*Set its position*/
        lv_obj_set_size(label2, 120, 50);                        /*Set its size*/

       
        lv_style_init(&style2);
        lv_style_set_text_font(&style2, LV_STATE_DEFAULT, &myFont1);
        lv_obj_add_style(label2, LV_LABEL_PART_MAIN, &style2);
        lv_label_set_text(label2, "中文测试");

}

阿里兄 发表于 2022-1-2 19:04:53

本帖最后由 阿里兄 于 2022-1-2 19:07 编辑

LVGL 7版本,应该是你没有正确设置字体,给个参考,你也可以参考LV的例程。#include "lvgl/lvgl.h"

LV_FONT_DECLARE(myFont)

static lv_style_t style_label;

void lvgl_test(void)
{
//    lv_obj_t *scr = lv_disp_get_scr_act(NULL);/* 获取当前屏幕 */
//    lv_obj_t *image = lv_img_create(scr,NULL);/* 创建 image 控件 */
//    lv_img_set_src(image,&img_human); /* 为控件设置图片 */
//    lv_obj_align(image,NULL,LV_ALIGN_IN_TOP_MID,0,0);/* 设置控件的对齐方式,相对坐标 */

    lv_style_init(&style_label);
    lv_style_set_bg_opa(&style_label, LV_STATE_DEFAULT, LV_OPA_COVER);
    lv_style_set_text_font(&style_label, LV_STATE_DEFAULT, &myFont);

    lv_theme_t * th = LV_THEME_DEFAULT_INIT(LV_COLOR_BLACK, LV_COLOR_BLACK,
                                                 0, &myFont, &myFont,
                                                 &myFont, &myFont);
    lv_theme_set_act(th);

    lv_obj_t *scr = lv_disp_get_scr_act(NULL);/* 获取当前屏幕 */
    lv_scr_load(scr);

    lv_obj_t *label1 = lv_label_create(scr,NULL); /* 创建 label 控件 */
    //lv_obj_set_style(label1,&style_label); /* 为控件设置新的 style */
    lv_obj_set_pos(label1,0,0); /* 设置控件的坐标 */
    lv_label_set_text(label1,"Hello你好世界"); /* 设置文字 */
    lv_obj_align(label1,NULL,LV_ALIGN_IN_TOP_MID,0,100); /* 设置控件的对齐方式-相对坐标 */
}


feihongkld 发表于 2022-1-4 13:44:23

测试了,还是不行,void lvgl_test(void)
{
    lv_style_init(&style_label);
    lv_style_set_bg_opa(&style_label, LV_STATE_DEFAULT, LV_OPA_COVER);
    lv_style_set_text_font(&style_label, LV_STATE_DEFAULT, &myFont1);

    lv_theme_t * th = LV_THEME_DEFAULT_INIT(LV_COLOR_BLACK, LV_COLOR_BLACK,
                                                 0, &myFont1, &myFont1,
                                                 &myFont1, &myFont1);
    lv_theme_set_act(th);
    lv_obj_t *scr = lv_disp_get_scr_act(NULL);/* 获取当前屏幕 */
    lv_scr_load(scr);

    lv_obj_t *label1 = lv_label_create(scr,NULL); /* 创建 label 控件 */
    //lv_obj_set_style(label1,&style_label); /* 为控件设置新的 style */
    lv_obj_set_pos(label1,0,0); /* 设置控件的坐标 */
    lv_label_set_text(label1,"Hello你好世界"); /* 设置文字 */
    lv_obj_align(label1,NULL,LV_ALIGN_IN_TOP_MID,0,100); /* 设置控件的对齐方式-相对坐标 */
}
结果见附件图片,是不是我中文字库的问题,能否把你的中文字库.C文件发给我一下我试试

feihongkld 发表于 2022-1-4 13:47:35

这是我用工具4.0生成的字库文件,

阿里兄 发表于 2022-1-4 13:48:07

feihongkld 发表于 2022-1-4 13:44
测试了,还是不行,void lvgl_test(void)
{
    lv_style_init(&style_label);


你可以转一个内部字体测试一下先,字体工具用起来很简单的

阿里兄 发表于 2022-1-4 13:59:57

feihongkld 发表于 2022-1-4 13:47
这是我用工具4.0生成的字库文件,

字体测试没有问题,完整测试代码和运行效果如下:
void lvgl_test(void)
{
    lv_obj_t *scr = lv_disp_get_scr_act(NULL);/* 获取当前屏幕 */

    lv_theme_t * th = lv_theme_material_init(LV_COLOR_BLACK, LV_COLOR_BLACK,0,
                                             &myFont1, &myFont1,
                                             &myFont1, &myFont1);
    lv_theme_set_act(th);

    lv_scr_load(scr);

    lv_obj_t *label1 = lv_label_create(scr,NULL); /* 创建 label 控件 */
    lv_obj_set_pos(label1,0,0); /* 设置控件的坐标 */
    lv_label_set_text(label1,"你好,里飞网:www.lfly.xyz\n参数\n配置\n维护"); /* 设置文字 */
    lv_obj_align(label1,NULL,LV_ALIGN_IN_TOP_MID,0,240); /* 设置控件的对齐方式-相对坐标 */
}


feihongkld 发表于 2022-1-4 14:05:49

    0x007a,      /*(z)*/
    0x007b,      /*({)*/
    0x007c,      /*(|)*/
    0x007d,      /*(})*/
    0x007e,      /*(~)*/
    0x007f,      /*()*/
    0x516c,      /*(公)*/
    0x5229,      /*(利)*/
    0x53f8,      /*(司)*/
    0x5929,      /*(天)*/
    0x5f00,      /*(开)*/
    0x6d25,      /*(津)*/
    0x8fbe,      /*(达)*/
    0x0000,    /*End indicator*/
};
中文,英文都不能显示了 ,是什么原因呢

feihongkld 发表于 2022-1-4 14:09:21

能否把你的这个字库文件发给我一下,或者把你的工程文件发给我测试一下,我是7.11版本,谢谢!

阿里兄 发表于 2022-1-4 14:10:04

feihongkld 发表于 2022-1-4 14:05
0x007a,      /*(z)*/
    0x007b,      /*({)*/
    0x007c,      /*(|)*/


字模有问题,字体选择不对,不要勾TTF,这样使用就会简单一些,转换的是否正常,一看字模就能知道。

feihongkld 发表于 2022-1-4 14:14:52

本帖最后由 feihongkld 于 2022-1-4 14:16 编辑

/* 司 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x30,0x00,//...................+....
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8e,0xe8,0x00,//..................+@@+..
0x00,0x00,0xaf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x30,//....%@@@@@@@@@@@@@@@@@..
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0xe5,0x00,//..................%@@+..
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8a,0x00,0xaf,0xe5,0x00,//..............+%..%@@+..
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xef,0xc0,0xaf,0xe5,0x00,//..............@@%.%@@+..
0x05,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xaf,0xe5,0x00,//.+@@@@@@@@@@@@@@@%%@@+..
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0xe5,0x00,//..................%@@+..
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaf,0xe5,0x00,//..................%@@+..
0x00,0x00,0x8c,0xa3,0x00,0x00,0xcc,0x50,0x00,0xaf,0xe5,0x00,//....+%%.....%%+...%@@+..
0x00,0x00,0x8e,0xff,0xff,0xff,0xff,0xfa,0x00,0xaf,0xe5,0x00,//....+@@@@@@@@@@%..%@@+..
0x00,0x00,0x8e,0xe3,0x00,0x03,0xef,0xc0,0x00,0xaf,0xe5,0x00,//....+@@.....@@%...%@@+..
0x00,0x00,0x8e,0xe3,0x00,0x03,0xef,0xc0,0x00,0xaf,0xe5,0x00,//....+@@.....@@%...%@@+..
0x00,0x00,0x8e,0xe3,0x00,0x03,0xef,0xc0,0x00,0xaf,0xe5,0x00,//....+@@.....@@%...%@@+..
0x00,0x00,0x8e,0xe3,0x00,0x03,0xef,0xc0,0x00,0xaf,0xe5,0x00,//....+@@.....@@%...%@@+..
0x00,0x00,0x8e,0xff,0xff,0xff,0xff,0xc0,0x00,0xaf,0xe5,0x00,//....+@@@@@@@@@%...%@@+..
0x00,0x00,0x8e,0xe3,0x00,0x03,0xef,0xc0,0x00,0xaf,0xe5,0x00,//....+@@.....@@%...%@@+..
0x00,0x00,0x8e,0xe3,0x00,0x03,0x85,0x00,0x00,0xaf,0xe5,0x00,//....+@@.....++....%@@+..
0x00,0x00,0x35,0x00,0x00,0x00,0x03,0x33,0x00,0xaf,0xe5,0x00,//.....+............%@@+..
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x8c,0xff,0xff,0xe3,0x00,//..............+%@@@@@...
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8e,0xff,0xc0,0x00,//................+@@@%...
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0xe8,0x00,0x00,//.................@@+....

};

英文显示正常了,中文还是不显示:( ,中文编码对吗

阿里兄 发表于 2022-1-4 14:16:38

feihongkld 发表于 2022-1-4 14:14
英文显示正常了,中文还是不显示 ,中文编码对吗

MDK使用ANSI编码,C文件使用UTF8编码,具体请看工具里面的帮助说明。就这样吧。

feihongkld 发表于 2022-1-4 14:21:51

本帖最后由 feihongkld 于 2022-1-4 14:24 编辑

明白了,我一直以为字体库文件是UTF8编码就OK,而其他调用的C文件 没有注意是不是UTF8,谢谢!测试OK了,:victory:
页: [1]
查看完整版本: LVGL7.11 加载中文字库,无法正常显示