图片"/>
emwin读取sd图片
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
24.3 SIF格式字体使用方法
SIF格式字体的使用通过下面四步就可以实现:
第1步:定义16点阵,24点阵带2倍抗锯齿效果的SIF格式字体
/*
*********************************************************************************************************
* SIF字体定义
*********************************************************************************************************
*/
GUI_FONTSIF_AA2_Font24;
GUI_FONTSIF_Font16;
使用FontCvt生成了几种字体就需要定义几个。
第2步:加载并创建16点阵,24点阵带2倍抗锯齿效果的SIF格式字体
/*
*********************************************************************************************************
* 函 数名: LoadFontLib()
* 功能说明: 从SD卡中加载字库文件到SPIFLASH
* 形 参:无
* 返 回值: 无
*********************************************************************************************************
*/
void *_LoadSIFFont(const char *sFilename)
{
char*_acBuffer;
GUI_HMEMhMem;
/* 打开文件 */
result =f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
if(result != FR_OK)
{
return0;
}
/* 申请一块内存空间 并且将其清零 */
hMem =GUI_ALLOC_AllocZero(file.fsize);
/* 将申请到内存的句柄转换成指针类型 */
_acBuffer= GUI_ALLOC_h2p(hMem);
/* 读取文件到动态内存 */
result =f_read(&file, _acBuffer, file.fsize, &bw);
if(result != FR_OK)
{
return0;
}
/* 关闭文件 */
f_close(&file);
return_acBuffer;
}
/*
*********************************************************************************************************
* 函 数名: MainTask
* 功能说明: GUI主函数
* 形 参:无
* 返 回值: 无
*********************************************************************************************************
*/
void MainTask(void)
{
uint8_t*_acBufferFont16;
uint8_t*_acBufferFont24;
/* 此处省略未写*/
/* 加载SIF格式字库到emWin动态内存,即SDRAM里面*/
_acBufferFont16= _LoadSIFFont("Song16.sif");
/* 创建SIF格式字体,16点阵宋体*/
GUI_SIF_CreateFont(_acBufferFont16,&SIF_Font16, GUI_SIF_TYPE_PROP);
/* 加载SIF格式字库到emWin动态内存,即SDRAM里面*/
_acBufferFont24= _LoadSIFFont("Song24.sif");
/* 创建SIF格式字体,24点阵宋体*/
GUI_SIF_CreateFont(_acBufferFont24,&SIF_AA2_Font24, GUI_SIF_TYPE_PROP_AA2);
/* 此处省略未写 */
}
通过上面的代码主要实现从SD卡中加载字体Song24.sif和Song16.sif到emWin动态内存,即SDRAM里面,然后创建SIF格式字体。其中,创建SIF字体要用到函数:GUI_SIF_CreateFont,关于这个函数有必要说说,函数的原型如下:
void GUI_SIF_CreateFont(void * pFontData,
GUI_FONT* pFont,
constGUI_SIF_TYPE * pFontType);
(1)第1个参数填写SIF字体的首地址,注意,一定要是总线地址,非总线方式不支持。
(2)第2个参数填写第1步中定义的SIF字体变量。
(3)第3个参数要特别注意,参数类型一定要跟FontCvt创建时的字体类型对应。此参数有以下五种类型。
GUI_SIF_TYPE_PROP
GUI_SIF_TYPE_PROP_AA2
GUI_SIF_TYPE_PROP_AA4
GUI_SIF_TYPE_PROP_EXT
GUI_SIF_TYPE_PROP_FRM
GUI_SIF_TYPE_PROP_AA2_EXT
GUI_SIF_TYPE_PROP_AA4_EXT
而FontCvt创建的时候有以下七种类型:
对应关系是
GUI_SIF_TYPE_PROP = Standard
GUI_SIF_TYPE_PROP_AA2 = Antialiased 2bpp
GUI_SIF_TYPE_PROP_AA4 = Antialiased 2bpp
GUI_SIF_TYPE_PROP_EXT = Extended
GUI_SIF_TYPE_PROP_FRM = Extended,framed
GUI_SIF_TYPE_PROP_AA2_EXT = Extended,antialiased,2bpp
GUI_SIF_TYPE_PROP_AA4_EXT = Extended,antialiased,4bpp
初学者使用的时候,一定要注意这个问题。FontCvt创建时用的哪种字体类型,实际使用时就必须使用哪种类型。
第3步:加载到emWin动态内存并创建了SIF字体后,使用就比较简单了。
用户只需调用函数GUI_UC_SetEncodeUTF8()使能UTF-8编码就可以使用SIF格式的字体了,比如设置按钮的字体,调用如下设置函数即可。
BUTTON_SetFont(hWin, &SIF_Font16); /* hWin是按钮的句柄 */
第4步:最后一步切不可忘记设置汉字显示所在源文件的编码类型,具体MDK和IAR的设置方法请看第22章的22.4小节(本章节配套的例子也是设置的MainTask,c文件),这一步绝对不可以省略。
通过以上四步就实现SIF格式字体的显示了。
更多推荐
emwin读取sd图片
发布评论