搜索
bottom↓
回复: 12

如何給lvgl(一个小型开源GUI)增加汉字支持?

[复制链接]

出0入4汤圆

发表于 2018-11-8 10:25:58 | 显示全部楼层 |阅读模式
如何給lvgl(一个小型开源GUI)增加汉字支持?要求可以汉字和英文字符混合显示。汉字采用一个SPI接口字库,英文字符字库为内置。存在汉字和英文字符宽度不相等,以及取字库位置不同等问题。有经验的朋友帮忙提供点思路,非常感谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2018-11-8 14:13:04 | 显示全部楼层
根据字符编码(GB2312/UNICODE),寻址字符位图数据,然后根据位图数据打点即可.

出0入0汤圆

发表于 2018-11-12 15:15:21 | 显示全部楼层
官方工具给了一个在线转换的工具。你试一下看看。我这里太卡了。没有成功。需要在线上传字体。

出0入4汤圆

 楼主| 发表于 2018-11-12 15:20:38 | 显示全部楼层
xk100 发表于 2018-11-12 15:15
官方工具给了一个在线转换的工具。你试一下看看。我这里太卡了。没有成功。需要在线上传字体。 ...

能贴个链接过来吗 感谢 !

出0入93汤圆

发表于 2018-11-12 15:45:48 | 显示全部楼层
安富莱论坛里有人搞的:

[LittleV GUI] Littlevgl 添加外部中文字库方法
http://forum.armfly.com/forum.php?mod=viewthread&tid=89518

[LittleV GUI] 【加入汉字显示】分享一个【LittleVGL 5.1版本】写的小demo
http://forum.armfly.com/forum.php?mod=viewthread&tid=86371

出10入12汤圆

发表于 2018-11-12 17:16:31 | 显示全部楼层
有官方工具的!!!!!!!!!!

出0入0汤圆

发表于 2018-11-12 23:16:42 | 显示全部楼层
billtian 发表于 2018-11-12 15:20
能贴个链接过来吗 感谢 !

https://littlevgl.com/ttf-font-to-c-array  字体工具
https://littlevgl.com/image-to-c-array  图片工具

出0入4汤圆

 楼主| 发表于 2018-11-13 15:44:20 | 显示全部楼层
本帖最后由 billtian 于 2018-11-14 16:49 编辑

中英文混合显示OK了 简单记录下过程
填充字体结构体
lv_font_t lv_user_font_1616 = {
    .unicode_first = 0,                        /*简单设置成0*/
    .unicode_last = 0xffff,                /*简单设置成65535*/
    .h_px = 16,                           /*字体高度,16*16字体为16*/
    .glyph_bitmap = NULL,                /*如果字库以数组形式放C文件里,此处为数组地址,我是从外部FLASH内读入所以设置为空*/
    .glyph_dsc = NULL,               /*设置为空*/
    .glyph_cnt = 0xffff,                  /*字库内字符个数 设置为65535*/
    .unicode_list = NULL,           /*Every character in the font from 'unicode_first' to 'unicode_last'*/
    .get_bitmap = lv_user_font_get_bitmap,    /*读取字库数据函数*/
    .get_width = lv_user_font_get_width,           /*读取字库宽度函数*/
    .bpp = 1,                                               /*Bit per pixel 一般为1*/
    .monospace = 0,
    .next_page = NULL,      /*Pointer to a font extension*/
};
实现以下两个函数
lv_user_font_get_bitmap,    /*读取字库数据函数*/
lv_user_font_get_width,           /*读取字库宽度函数*/
用以下函数初始化时调用 加入自定义字体
void lv_user_font_init(void)
{
      lv_font_add(&lv_user_font_1616, NULL);
}
修改lv_txt.c中以下文件  增加对中文字符的判断
static uint32_t lv_txt_ascii_next(const char * txt, uint32_t * i)
{
    if(i == NULL) return txt[1];    /*Get the next char */

    if((txt[*i] & 0x80) == 0)
    {
        uint8_t letter = txt[*i] ;
        (*i)++;
        return letter;
    }
    else
    {
        uint32_t letter = txt[*i];
        (*i)++;
                                letter <<= 8;
                                letter += txt[*i];       
        (*i)++;
        return letter;
    }
    return 0;
}
lv_conf.h中增加以下
#define LV_FONT_CUSTOM_DECLARE         LV_FONT_DECLARE(lv_user_font_1616)
现在就可以把默认字体改成自己的字体实验一下了
#define LV_FONT_DEFAULT        &lv_user_font_1616
显示效果如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-12-23 10:22:08 | 显示全部楼层
billtian 发表于 2018-11-13 15:44
中英文混合显示OK了 简单记录下过程
填充字体结构体
lv_font_t lv_user_font_1616 = {

mark,中文lvgl。

出0入0汤圆

发表于 2018-12-23 10:45:56 来自手机 | 显示全部楼层
niubility你

出0入0汤圆

发表于 2018-12-23 18:18:09 来自手机 | 显示全部楼层
这种gui改控件的外观Rom容易么

出0入0汤圆

发表于 2018-12-24 10:29:49 | 显示全部楼层
这个界面效果还是不错的

出0入0汤圆

发表于 2019-6-3 15:07:14 | 显示全部楼层
刚开始移植littlevGL,谢谢楼主分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 13:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表