|
这个贴其实是没必要发的,因为网上已有太多例子,都是讲如何使用xbf字库的,而且官方的文档里面也说得很明白。但是我想还是会有很多人不明白怎么用,我最开始也卡了好久。主要是没想明白这个XBF字库的实现方式。
网上之所以找不到太多相关的资料,只有一个原因,就是太简单了,会的人没把这当回事。
下面这几行代码,相信看过emWin手册的人,都不会陌生。
static GUI_FONT xbfFont; /* GUI_FONT structure in RAM */
static GUI_XBF_DATA XBF_Data; /* GUI_XBF_DATA structure in RAM */
static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
{
W25XxxReadData(FONT_BASE_ADDR + Off, pBuffer, NumBytes);
return (0);
}
void CreateXBF_Font(void)
{
GUI_XBF_CreateFont(&xbfFont, /* Pointer to GUI_FONT structure */
&XBF_Data, /* Pointer to GUI_XBF_DATA structure */
GUI_XBF_TYPE_PROP, /* Font type to be created */
_cbGetData, /* Pointer to callback function */
NULL); /* Pointer to be passed to callback */
}
//===================================================================
GUI_FONT * SetFont_Xbf(void)
{
return ((GUI_FONT *)GUI_SetFont(&xbfFont));
}
//===================================================================
FONT_BASE_ADDR 这是XBF文件在FLASH中的起始地址
W25XxxReadData 这是从FLASH中读取数据的函数
关键是这个函数 static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
Off 是XBF文件的内部偏移
pVoid 是GUI_XBF_CreateFont的最后一个参数,在这里我们不用这个参数。
pBuffer 读回来的数据就到这里了,剩下的就是emWin的事了。
附件给一个可用的FontCvt版本,我从网上找的,已经验证过的,不敢藏私,分享给大家用。用这个文件生成一个XBF文件,把文件下载到FLASH中就可以了。
emWin的字库采用的索引表的方式查找字符,在调用GUI_XBF_CreateFont创建XBF字库时,会读取字库的索引信息填充xbfFont,XBF_Data这两个结构体。
最后上一张图片。
CreateXBF_Font(); //创建XBF字体
GUI_UC_SetEncodeUTF8(); //一定要设置这个
GUI_SetFont(GUI_FONT_6X8_ASCII);
GUI_DispStringAt("GUI Start Succ!", 7, 4);
SetFont_Xbf(); //然后像使用其它字体一样,设置XBF字库为当前字体
GUI_DispStringAt("汉字显示测试OK!", 4, 20); //用起来就是这么简单
GUI_DispStringAt("123ABC四五六七.", 4, 40);
FontCvt_V520.rar
(148 KB, 下载次数: 376)
|
|