lvgl的区别qt_最新LVGL_V7.0及以上版本添加内、外部中文字体方法

lvgl的区别qt_最新LVGL_V7.0及以上版本添加内、外部中⽂字
体⽅法
/* 字库区域占⽤的总扇区数⼤⼩
#define FONTSECSIZE    2560
/* 字库存放起始地址 */
#define FONTINFOADDR    1024*1024*6
/* ⽤来保存字库基本信息,地址,⼤⼩等 */
_font_info ftinfo;
/* 字库存放在磁盘中的路径 */
const char * GBK24_PATH="/SYSTEM/FONT/GBK24.FON";          /* GBK24的存放位置 */
const char * GBK16_PATH="/SYSTEM/FONT/GBK16.FON";          /* GBK16的存放位置 */
const char * GBK12_PATH="/SYSTEM/FONT/GBK12.FON";          /* GBK12的存放位置 */
const char * UNIGBK_PATH="/SYSTEM/FONT/UNIGBK.BIN";        /* UNIGBK.BIN的存放位置 */
const char * LVGL_12_PATH="/SYSTEM/LVGLFONT/myFont12.bin";  /* UNIGBK.BIN的存放位置 1,014,611 字节 */
const char * LVGL_18_PATH="/SYSTEM/LVGLFONT/myFont18.bin";  /* UNIGBK.BIN的存放位置 1,732,774 字节 */
const char * LVGL_24_PATH="/SYSTEM/LVGLFONT/myFont24.bin";  /* UNIGBK.BIN的存放位置 2,814,026 字节 */
/**
* @brief      显⽰当前字体更新进度
* @param      x, y    : 坐标
* @param      size    : 字体⼤⼩
* @param      totsize : 整个⽂件⼤⼩
* @param      pos    : 当前⽂件指针位置
* @param      color  : 字体颜⾊
* @retval      ⽆
*/
uint32_t fupd_prog(uint16_t x,uint16_t y,uint8_t size,uint32_t fsize,uint32_t pos)
{
float prog;
uint8_t t=0XFF;
prog=(float)pos/fsize;
prog*=100;
if(t!=prog)
{
msinfolcd_show_string(x+3*size/2,y,240,320,size,"%",g_point_color);
t=prog;
if(t>100)t=100;
lcd_show_num(x,y,t,3,size,g_point_color);/* 显⽰数值 */
}
return 0;
}
/**
* @brief      更新某⼀个字库
* @param      x, y    : 提⽰信息的显⽰地址
* @param      size    : 提⽰信息字体⼤⼩
* @param      fpath  : 字体路径
* @param      fx      : 更新的内容
*  @arg                0, ungbk;
*  @Arg                1, gbk12;
*  @arg                2, gbk16;
*  @arg                3, gbk24;
*  @arg                4, gbk32;
* @param      color  : 字体颜⾊
* @retval      0, 成功; 其他, 错误代码;
*/
uint8_t updata_fontx(uint16_t x,uint16_t y,uint8_t size,char *fxpath,uint8_t fx) {
uint32_t flashaddr=0;
FIL * fftemp;
uint8_t *tempbuf;
uint8_t res;
uint16_t bread;
uint32_t offx=0;
uint8_t rval=0;
fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));    /* 分配内存 */
if(fftemp==NULL)rval=1;
tempbuf=mymalloc(SRAMIN,4096);                /* 分配4096个字节空间 */
if(tempbuf==NULL)rval=1;
res=f_open(fftemp,(const TCHAR*)fxpath,FA_READ);
if(res)rval=2;/* 打开⽂件失败 */
if(rval==0)
{
switch(fx)
{
case 0:                                                /* 更新UNIGBK.BIN */
ftinfo.ugbkaddr=FONTINFOADDR+sizeof(ftinfo);    /* 信息头之后,紧跟UNIGBK转换码表 */ ftinfo.ugbksize=fftemp->fsize;            /* UNIGBK⼤⼩ */
flashaddr=ftinfo.ugbkaddr;
break;
case 1:
ftinfo.f12addr=ftinfo.ugbkaddr+ftinfo.ugbksize;    /* UNIGBK之后,紧跟GBK12字库 */ ftinfo.gbk12size=fftemp->fsize;            /* GBK12字库⼤⼩ */
flashaddr=ftinfo.f12addr;                        /* GBK12的起始地址 */
break;
case 2:
ftinfo.f16addr=ftinfo.f12addr+ftinfo.gbk12size;    /* GBK12之后,紧跟GBK16字库 */ ftinfo.gbk16size=fftemp->fsize;            /* GBK16字库⼤⼩ */
flashaddr=ftinfo.f16addr;                        /* GBK16的起始地址 */
break;
case 3:
ftinfo.f24addr=ftinfo.f16addr+ftinfo.gbk16size;    /* GBK16之后,紧跟GBK24字库 */ ftinfo.gkb24size=fftemp->fsize;                    /* GBK24字库⼤⼩ */
flashaddr=ftinfo.f24addr;                        /* GBK24的起始地址 */
break;
case 4:
ftinfo.lvgl_12addr=ftinfo.f24addr+ftinfo.gkb24size;
ftinfo.lvgl_12size=fftemp->fsize;
flashaddr=ftinfo.lvgl_12addr;
break;
case 5:
ftinfo.lvgl_18addr=ftinfo.lvgl_12addr+ftinfo.lvgl_12size;
ftinfo.lvgl_18size=fftemp->fsize;
flashaddr=ftinfo.lvgl_18addr;
break;
case 6:
ftinfo.lvgl_24addr=ftinfo.lvgl_18addr+ftinfo.lvgl_18size;
ftinfo.lvgl_24size=fftemp->fsize;
flashaddr=ftinfo.lvgl_24addr;
break;
}
while(res==FR_OK)/* 循环执⾏ */
{
res=f_read(fftemp,tempbuf,4096,(UINT *)&bread);    /* 读取数据 */
if(res!=FR_OK)break;                                /* 执⾏错误 */
w25qxx_write(tempbuf,offx+flashaddr,4096);          /* 从0开始写⼊4096个数据 */ offx+=bread;
fupd_prog(x,y,size,fftemp->fsize,offx);            /* 进度显⽰ */
if(bread!=4096)break;                              /* 读完了 */
}
f_close(fftemp);
}
myfree(SRAMIN,fftemp);    /* 释放内存 */
myfree(SRAMIN,tempbuf);    /* 释放内存 */
return res;
}
/
**
* @brief      更新字体⽂件
*  @note      所有字库⼀起更新(UNIGBK,GBK12,GBK16,GBK24,GBK32)
* @param      x, y    : 提⽰信息的显⽰地址
* @param      size    : 提⽰信息字体⼤⼩
* @param      src    : 字库来源磁盘
*  @arg                "0:", SD卡;
*  @Arg                "1:", FLASH盘
*  @arg                "2:", U盘
* @param      color  : 字体颜⾊
* @retval      0, 成功; 其他, 错误代码;
*/
uint8_t update_font(uint16_t x,uint16_t y,uint8_t size,char *src) {
char *pname;
uint32_t *buf;
uint8_t res=0;
uint16_t i,j;
FIL *fftemp;
uint8_t rval=0;
res=0XFF;
ftinfo.fontok=0XFF;
pname=mymalloc(SRAMIN,100);    /* 申请100字节内存 */
buf=mymalloc(SRAMIN,4096);    /* 申请4K字节内存 */
fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));    /* 分配内存 */
if(buf==NULL||pname==NULL||fftemp==NULL)
{
myfree(SRAMIN,fftemp);
myfree(SRAMIN,pname);
myfree(SRAMIN,buf);
return 5;    /* 内存申请失败 */
}
/* 先查⽂件是否正常 */
strcpy((char*)pname,(char*)src);    /* copy src内容到pname */ strcat((char*)pname,(char*)UNIGBK_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<4;/* 打开⽂件失败 */
strcpy((char*)pname,(char*)src);    /* copy src内容到pname */ strcat((char*)pname,(char*)GBK12_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<5;/* 打开⽂件失败 */
strcpy((char*)pname,(char*)src);    /* copy src内容到pname */ strcat((char*)pname,(char*)GBK16_PATH);
res=f_open(fftemp,(const TCHAR*)pname,FA_READ);
if(res)rval|=1<<6;/* 打开⽂件失败 */

本文发布于:2024-09-21 15:31:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/380559.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字库   地址   内存   信息   存放
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议