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: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); /* 设置控件的对齐方式-相对坐标 */
}
测试了,还是不行,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文件发给我一下我试试 这是我用工具4.0生成的字库文件,
feihongkld 发表于 2022-1-4 13:44
测试了,还是不行,void lvgl_test(void)
{
lv_style_init(&style_label);
你可以转一个内部字体测试一下先,字体工具用起来很简单的 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); /* 设置控件的对齐方式-相对坐标 */
}
0x007a, /*(z)*/
0x007b, /*({)*/
0x007c, /*(|)*/
0x007d, /*(})*/
0x007e, /*(~)*/
0x007f, /*()*/
0x516c, /*(公)*/
0x5229, /*(利)*/
0x53f8, /*(司)*/
0x5929, /*(天)*/
0x5f00, /*(开)*/
0x6d25, /*(津)*/
0x8fbe, /*(达)*/
0x0000, /*End indicator*/
};
中文,英文都不能显示了 ,是什么原因呢 能否把你的这个字库文件发给我一下,或者把你的工程文件发给我测试一下,我是7.11版本,谢谢!
feihongkld 发表于 2022-1-4 14:05
0x007a, /*(z)*/
0x007b, /*({)*/
0x007c, /*(|)*/
字模有问题,字体选择不对,不要勾TTF,这样使用就会简单一些,转换的是否正常,一看字模就能知道。 本帖最后由 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,//.................@@+....
};
英文显示正常了,中文还是不显示:( ,中文编码对吗 feihongkld 发表于 2022-1-4 14:14
英文显示正常了,中文还是不显示 ,中文编码对吗
MDK使用ANSI编码,C文件使用UTF8编码,具体请看工具里面的帮助说明。就这样吧。 本帖最后由 feihongkld 于 2022-1-4 14:24 编辑
明白了,我一直以为字体库文件是UTF8编码就OK,而其他调用的C文件 没有注意是不是UTF8,谢谢!测试OK了,:victory:
页:
[1]