当前位置: 代码迷 >> 综合 >> STM32——EMWIN XBF 格式字体显示(二十一)
  详细解决方案

STM32——EMWIN XBF 格式字体显示(二十一)

热度:32   发布时间:2023-11-21 19:08:17.0

文章目录

  • 一、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使用非常卡。