文章目录
- 一、XBF 格式字库制作
-
- 1、选择字体类型
- 2.保存字体
- 二、XBF 字体相关 API 函数
-
- 1. GUI_XBF_CreateFont()函数
- 2.GUI_XBF_DeleteFont()
一、XBF 格式字库制作
首先我们要用字体转换器制作所需的 XBF 字体,我们下载的 STemWin 源码中已经包含了字 体 转 换 器 :FontCvtST.exe
接下来我们制作 4 个 XBF 字库,字体都选择为宋体,大小分别为 12,16,24 和 36,字体类型为“Extended,antialiased,2bpp”,也就是扩展比例位图字体,包含 2bpp 抗锯齿。
1、选择字体类型
2.保存字体
点击:File->Save As,出现如图所示对话框,选择保存类型为.xbf
将制作好的 XBF 字体拷贝到 SD 卡指定文件目录中:SYSTEM->EMWINFONT->XBF
二、XBF 字体相关 API 函数
与 XBF 字体相关的函数有两个:GUI_XBF_CreateFont()和 GUI_XBF_DeleteFont()
1. GUI_XBF_CreateFont()函数
描述
通过将指针传递至负责从 XBF 字体文件获取数据的回调函数创建和选择字体。
原型
int GUI_XBF_CreateFont( GUI_FONT *pFont,GUI_XBF_DATA *pxBF_Data,const GUI_XBF_TYPE *pFontType,GUI_XBF_GET_DATA_FUNC *pfGetData,void *pVoid );
2.GUI_XBF_DeleteFont()
描述
删除参数 pFont 指示的 XBF 字体。
原型
void GUI_XBF_DeleteFont(GUI_FONT * pFont);
参数说明
pFont:指向要删除的字体。
其他信息
使用 GUI_XBF_CreateFont() 创建的字体后,如果不再使用该字体,应将其删除
#include "xbffontcreate.h"
#include "ff.h"#if SYSTEM_SUPPORT_UCOS
#include "includes.h" //ucos ????
#endif//?¨??×???
GUI_FONT XBF12_Font;
GUI_FONT XBF16_Font;
GUI_FONT XBF24_Font;
GUI_FONT XBF36_Font;GUI_XBF_DATA XBF12_Data;
GUI_XBF_DATA XBF16_Data;
GUI_XBF_DATA XBF24_Data;
GUI_XBF_DATA XBF36_Data;FIL XBF16FontFile;
FIL XBF12FontFile;
FIL XBF24FontFile;
FIL XBF36FontFile;//???÷??????????????×???????
//??????Off: ??XBF??????(????)
// NumBytes: ????????×?????
// pVoid: ????????????
// pBuff: ????????????????????
//·?????:0 ??????1 ?§°?
static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
{
int result;u16 bread; FIL *hFile;#if SYSTEM_SUPPORT_UCOSOS_CPU_SR cpu_sr;#endifhFile = (FIL*)pVoid; //?è????????????????(????)result = f_lseek(hFile,Off);if(result != FR_OK) return 1; //·????í?ó//????×???????#if SYSTEM_SUPPORT_UCOSOS_ENTER_CRITICAL(); //??????#endifresult = f_read(hFile,pBuffer,NumBytes,(UINT *)&bread); //????????#if SYSTEM_SUPPORT_UCOSOS_EXIT_CRITICAL(); //??????????#endifif(result != FR_OK) return 1; //·????í?óreturn 0;
}//???¨XBF12×???????EMWIN????
//fxpath:XBF×????????·??
//·?????:0????????1???§°?
u8 Create_XBF12(u8 *fxpath)
{
int result;result = f_open(&XBF12FontFile,(const TCHAR*)fxpath,FA_READ); //?ò??×???????if(result != FR_OK) return 1;//???¨XBF16×???GUI_XBF_CreateFont( &XBF12_Font, //???òGUI_FONT?á??&XBF12_Data, //???òGUI_XBF_DATA?á??GUI_XBF_TYPE_PROP_AA2_EXT,//?????¨??×????à??_cbGetData, //???÷????&XBF12FontFile); //?°???????÷????_cbGetData??????return 0;
}//???¨XBF16×???????EMWIN????
//fxpath:XBF×????????·??
//·?????:0????????1???§°?
u8 Create_XBF16(u8 *fxpath)
{
int result;result = f_open(&XBF16FontFile,(const TCHAR*)fxpath,FA_READ); //?ò??×???????if(result != FR_OK) return 1;//???¨XBF16×???GUI_XBF_CreateFont( &XBF16_Font, //???òGUI_FONT?á??&XBF16_Data, //???òGUI_XBF_DATA?á??GUI_XBF_TYPE_PROP_AA2_EXT,//?????¨??×????à??_cbGetData, //???÷????&XBF16FontFile); //?°???????÷????_cbGetData??????return 0;
}//???¨XBF24×???????EMWIN????
//fxpath:XBF×????????·??
//·?????:0????????1???§°?
u8 Create_XBF24(u8 *fxpath)
{
int result;result = f_open(&XBF24FontFile,(const TCHAR*)fxpath,FA_READ); //?ò??×???????if(result != FR_OK) return 1;//???¨XBF16×???GUI_XBF_CreateFont( &XBF24_Font, //???òGUI_FONT?á??&XBF24_Data, //???òGUI_XBF_DATA?á??GUI_XBF_TYPE_PROP_AA2_EXT,//?????¨??×????à??_cbGetData, //???÷????&XBF24FontFile); //?°???????÷????_cbGetData??????return 0;
}//???¨XBF36×???????EMWIN????
//fxpath:XBF×????????·??
//·?????:0????????1???§°?
u8 Create_XBF36(u8 *fxpath)
{
int result;result = f_open(&XBF36FontFile,(const TCHAR*)fxpath,FA_READ); //?ò??×???????if(result != FR_OK) return 1; //???¨XBF16×???GUI_XBF_CreateFont( &XBF36_Font, //???òGUI_FONT?á??&XBF36_Data, //???òGUI_XBF_DATA?á??GUI_XBF_TYPE_PROP_AA2_EXT,//?????¨??×????à??_cbGetData, //???÷????&XBF36FontFile); //?°???????÷????_cbGetData??????return 0;
}
建议使用F4,F1使用非常卡。