STM32-EMWIN XBF形式のフォント表示(21)

1つは、XBF形式のフォントの作成

まず、フォントコンバーターを使用して必要なXBFフォントを作成する必要があります。ダウンロードしたSTemWinソースコードには、フォントコンバーターFontCvtST.exeが既に含まれています。
ここに画像の説明を挿入
ここに画像の説明を挿入
次に、4つのXBFフォントライブラリを作成します。フォントはすべてSongとして選択されます。タイプ、サイズは12、16、24、および36で、フォントタイプは「拡張、アンチエイリアス、2bpp」です。これは、2bppアンチエイリアスを含む拡張スケールビットマップフォントです。

1.フォントタイプを選択します

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

2.フォントを保存します

[ファイル]->[名前を付けて保存]をクリックすると、図に示すダイアログボックスが表示され、保存タイプを.xbfとして選択して
ここに画像の説明を挿入
ここに画像の説明を挿入
、作成したXBFフォントをSDカードの指定したファイルディレクトリにコピーします:SYSTEM-> EMWINFONT-> XBF

2.XBFフォント関連のAPI関数

XBFフォントに関連する2つの関数があります: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フォントを削除します。
プロトタイプ
voidGUI_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