記事ディレクトリ
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は非常にカードです。