STM32 - Visualización de fuentes en formato EMWIN XBF (21)

One, producción de fuentes en formato XBF

En primer lugar, necesitamos usar el convertidor de fuentes para crear las fuentes XBF requeridas. El código fuente de STemWin que descargamos ya contiene el convertidor de fuentes: FontCvtST.exe.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
A continuación, creamos 4 bibliotecas de fuentes XBF, todas las fuentes se seleccionan como Song type, el tamaño es 12, 16, 24 y 36, el tipo de fuente es "Extended, antialiased, 2bpp", que es una fuente de mapa de bits de escala extendida, que incluye antialiasing de 2bpp.

1. Seleccione el tipo de fuente

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. Guarda la fuente

Haga clic en: Archivo->Guardar como, aparece el cuadro de diálogo como se muestra en la figura, seleccione el tipo de guardado como .xbf
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
para copiar la fuente XBF creada en el directorio de archivos especificado de la tarjeta SD: SISTEMA->EMWINFONT->XBF

2. Funciones API relacionadas con la fuente XBF

Hay dos funciones relacionadas con las fuentes XBF: GUI_XBF_CreateFont() y GUI_XBF_DeleteFont()

1. Función GUI_XBF_CreateFont()

Descripción
Crea y selecciona una fuente pasando un puntero a una función de devolución de llamada responsable de obtener datos de un archivo de fuente XBF.
prototipo

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 );

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2.GUI_XBF_DeleteFont()

Descripción
Elimina la fuente XBF indicada por el parámetro pFont.
Prototipo
void GUI_XBF_DeleteFont(GUI_FONT * pFont);
Descripción del parámetro
pFont: apunta a la fuente a eliminar.
Información adicional
Después de crear una fuente con GUI_XBF_CreateFont(), debe eliminarse si ya no se usa

#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;
}

inserte la descripción de la imagen aquí
Se recomienda usar F4, y F1 es muy tarjeta.

Supongo que te gusta

Origin blog.csdn.net/qq_51963216/article/details/124077930
Recomendado
Clasificación