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

一、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_UCOS
		OS_CPU_SR cpu_sr;
	#endif

	hFile = (FIL*)pVoid; 
	
	//ÉèÖÃÔÚÎļþÖеÄÆ«ÒÆ(λÖÃ)
	result = f_lseek(hFile,Off);
	if(result != FR_OK)	return 1; //·µ»Ø´íÎó

	//¶ÁÈ¡×ÖÌåÊý¾Ý
	#if SYSTEM_SUPPORT_UCOS
		OS_ENTER_CRITICAL();	//ÁÙ½çÇø
	#endif
		
	result = f_read(hFile,pBuffer,NumBytes,(UINT *)&bread); //¶ÁÈ¡Êý¾Ý
	
	#if SYSTEM_SUPPORT_UCOS
		OS_EXIT_CRITICAL();	//Í˳öÁÙ½çÇø
	#endif
	
	if(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使用非常卡。

猜你喜欢

转载自blog.csdn.net/qq_51963216/article/details/124077930
今日推荐