阿里兄 发表于 2026-1-8 11:25 还是不行,搞不懂了。 |
迷茫的大笨象 发表于 2026-1-8 10:27 那就是做外部字体时,是否用的同一个TTF,不行就先不要勾TTF,用宋体试试。 |
/* Title */ lv_obj_t *title = lv_label_create(page); // 创建标题标签 lv_label_set_text(title, "迷茫的大笨象12aA!"); // 设置标题文本 lv_obj_set_style_text_color(title, lv_color_white(), 0); // 设置文本颜色 lv_obj_set_style_text_font(title, &lv_Font_SemiBold_24, 0); // 设置字体 lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10); // 对齐位置 内部字体可以正常显示的 |
迷茫的大笨象 发表于 2026-1-8 10:03 先内部字体,少量文字,查看是否生成对应字模,调通后再转外部字体。 |
| LVGL版本 V8.38 |
/* Title */ lv_obj_t *title = lv_label_create(page); // 创建标题标签 lv_label_set_text(title, "迷茫的大笨象"); // 设置标题文本 lv_obj_set_style_text_color(title, lv_color_white(), 0); // 设置文本颜色 lv_obj_set_style_text_font(title, &lv_ExtFont_SemiBold_24, 0); // 设置字体 lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10); // 对齐位置 大佬,请问下为什么显示汉字可以,ascii码不能显示,汉字混合ascii码都不显示,我也添加了啊。 /* *--------------------------------------------------------------- * Lvgl Font Tool * * 注:使用unicode编码 * 注:本字体文件由Lvgl Font Tool V0.4 生成 * 作者:阿里(qq:617622104) *--------------------------------------------------------------- */ #include "lvgl.h" typedef struct{ uint16_t min; uint16_t max; uint8_t bpp; uint8_t reserved[3]; }x_header_t; typedef struct{ uint32_t pos; }x_table_t; typedef struct{ uint8_t adv_w; uint8_t box_w; uint8_t box_h; int8_t ofs_x; int8_t ofs_y; uint8_t r; }glyph_dsc_t; static x_header_t __g_xbf_hd = { .min = 0x0009, .max = 0xffe5, .bpp = 2, }; //static uint8_t __g_font_buf[238];//如bin文件存在SPI FLASH可使用此buff static uint8_t *__user_font_getdata(int offset, int size){ //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size); //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset); return __g_font_buf; } static const uint8_t * __user_font_get_bitmap(const lv_font_t * font, uint32_t unicode_letter) { if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) { return NULL; } uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4; uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4); if( p_pos[0] != 0 ) { uint32_t pos = p_pos[0]; glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(pos, sizeof(glyph_dsc_t)); return __user_font_getdata(pos+sizeof(glyph_dsc_t), gdsc->box_w*gdsc->box_h*__g_xbf_hd.bpp/8); } return NULL; } static bool __user_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next) { if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) { return NULL; } uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4; uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4); if( p_pos[0] != 0 ) { glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(p_pos[0], sizeof(glyph_dsc_t)); dsc_out->adv_w = gdsc->adv_w; dsc_out->box_h = gdsc->box_h; dsc_out->box_w = gdsc->box_w; dsc_out->ofs_x = gdsc->ofs_x; dsc_out->ofs_y = gdsc->ofs_y; dsc_out->bpp = __g_xbf_hd.bpp; return true; } return false; } //Source Han Serif SC SemiBold,,-1 //字模高度:34 //XBF字体,外部bin文件 lv_font_t lv_ExtFont_SemiBold_24 = { .get_glyph_bitmap = __user_font_get_bitmap, .get_glyph_dsc = __user_font_get_glyph_dsc, .line_height = 34, .base_line = 0, }; |
WANG 发表于 2025-8-1 13:53 这是不是双unicode的字符,不确定是不是LVGL的问题,你可以试试官方的字体工具是否支持这些字符。 |
| 版主好,请问这几个特殊字母不能转换,是那里设置不对吗,ӘәҒғҚқҢңӨөҰұҮүҺһІі 这是哈萨克语除俄文字母以外的9个特殊字母 |
啊抠 发表于 2024-11-27 23:15 解决内部字体软件容易卡死问题,BIN文件不影响,其他没区别。 |
| 请问"直接存文件" 勾不勾是啥区别,要生成外部BIN文件的 |
lovemengx 发表于 2021-10-14 17:47 你好,我遇到了同样的问题,我确定字库加了中文,请问你最后怎么解决的 |
阿里兄 发表于 2021-8-24 23:54 //Roboto,,-1 //字模高度:35 //内部字体 //使用排序和二分查表 lv_font_t FNT_R30 = { .dsc = &font_dsc, .get_glyph_bitmap = __user_font_get_bitmap, .get_glyph_dsc = __user_font_get_glyph_dsc, .line_height = 35, .base_line = 0, }; 还要把__user_font_get_bitmap, __user_font_get_glyph_dsc, 这两个函数换成lv_font_get_glyph_dsc_fmt_txt,lv_font_get_bitmap_fmt_txt, 才行吧??? |
hjhj7591418 发表于 2024-4-23 13:52 很大可能是你读取函数有问题,建议你先使用内部XBF测试一下先,XBF是支持的。 |
|
阿里兄,我LVGL使用V8.3.5版本,使用LvglFontTool_V0.4导出“XBF字体,外部bin文件”使用, 但是卡死在“lv_obj_set_style_text_font(Labal, &RobotoR20, 0);”这句。 请问这是不支持V8以上版本吗?? |
limhanfeng 发表于 2024-4-8 15:08 XBF格式,是使用你所输入文字中unicode最大值和最小值之间所有字符都会添加到索引,用于快速查表,也就是空间换时间的做法,XBF格式字体适用于有大空间的场景使用。 |
| 阿里兄 我用XBF字体,外部bin文件,才10个阿拉伯数字10个英文字符4个汉字,抗锯齿开到4,结果生成的bin文件就有120KB,这正常吗 二进制文件这么大的吗 |
admin 发表于 2024-4-7 16:56 重新试了下,发现使用XBF字体,内部大数组也是同样现象,而使用官网的字体转换是能正常显示的 |
admin 发表于 2024-4-7 16:56 使用内部.c文件是正常的 |
limhanfeng 发表于 2024-4-7 15:54 使用内部字体是否正常?这种情况基本是读取或BIN文件写到FLASH时有问题。 |
admin 发表于 2024-4-7 15:48 这个我复制错了 重新修改了下 麻烦大佬再看下呗 |
limhanfeng 发表于 2024-4-7 15:43 __user_font_getdata中的bFirstIn有问题,init_font也重新定义了一个bFirstIn,这两个都是static属于只对本函数内有效,它们没有任何关系,要换成全局变量,你这C语言不过关啊 ![]() |
|
本帖最后由 limhanfeng 于 2024-4-7 15:47 编辑 我采用XBF字体,外部bin文件,放到了linux系统中的flash中,我的LVGL是8.0.0版本,经过烧录后,UI符号和中英文都没有显示,大佬门帮看下会是为何原因呀 修改__user_font_getdata接口实现如下:
字体为外部的思源宋体,生成前的设置如下:
![]() |
sutaojin 发表于 2024-3-15 14:01 字体大建议使用0.4版本的XBF格式。 |
| 楼主,0.5测试版本里面,还是存在字体大并且字数多的时候转换卡死的情况 |
Juszou 发表于 2024-3-11 18:30 左边看不到,那就是字体没有这些文字,可以选宋体或微软雅黑试试; |
阿里兄 发表于 2024-3-11 18:29 比如阿拉伯语,拉丁文,缅甸文,似乎再左边都看不到 |
Juszou 发表于 2024-3-11 18:20 这需要看你选的字体支持字符情况;字符多生成也很慢、可以直接生成文件;有部分是双unicode编码的文字可能不支持。 |
| 你好,我想知道 v0.4 支持阿拉伯语等除了中日韩英文以外的语言吗?我是用 python 脚本写入 0x0-0xFFFF 所有字符,但是工具并不能显示,并且也无法生成;工具是有最大的字符数量限制,还是语言限制? |
|
字库是乱码的 |
yuechaofu 发表于 2024-1-9 11:33 没看到附件,你可以先用内部字体进行测试。 |
GMT+8, 2026-2-16 00:38 , Processed in 0.108695 second(s), 8 queries , File On.
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】