论坛元老
- 积分
- 5174
- 金钱
- 5174
- 注册时间
- 2016-7-21
- 在线时间
- 1147 小时
|
楼主 |
发表于 2017-7-6 10:33:28
|
显示全部楼层
关于图标和背景显示:
方法一:
准备好需要显示的图片使用BmpCvtST.exe生成C文件
将C文件添加到工程里
添加到按钮自绘皮肤函数里
在初始化按钮是设置自绘函数
这种方式图片文件都在工程里比较占FLASH内存,下面介绍方法二将图片存放在内存卡或外部FLASH里
第二种方法:
把图片放在内存卡的某个目录里,然后在开机时将图片加载到SDRAM里:
FIL *ZhuJieMian_TuBiao_File;
APP_TuBiao *ZhuJieMian_TuBiao_BUF;
u8 ZhuJieMian_TuBiao_Flag[ZhuJieMian_TuBiao_NUM]={0};
//图片存放的地址
u8* const ZhuJieMian_TuBiao_Addr[]=
{
"0:/SYSTEM/APP/ICOS/GongJuXiang0.png",
"0:/SYSTEM/APP/ICOS/GongJuXiang1.png",
"0:/SYSTEM/APP/ICOS/XiangCe0.png",
"0:/SYSTEM/APP/ICOS/XiangCe1.png",
"0:/SYSTEM/APP/ICOS/ZaoXiangJi0.png",
"0:/SYSTEM/APP/ICOS/ZaoXiangJi1.png",
"0:/SYSTEM/APP/ICOS/WenJianLiuLan0.png",
"0:/SYSTEM/APP/ICOS/WenJianLiuLan1.png",
"0:/SYSTEM/APP/ICOS/YinYue0.png",
"0:/SYSTEM/APP/ICOS/YinYue1.png",
"0:/SYSTEM/APP/ICOS/ShiPin0.png",
"0:/SYSTEM/APP/ICOS/ShiPin1.png",
"0:/SYSTEM/APP/ICOS/LianXiRen0.png",
"0:/SYSTEM/APP/ICOS/LianXiRen1.png",
"0:/SYSTEM/APP/ICOS/DianHua0.png",
"0:/SYSTEM/APP/ICOS/DianHua1.png",
"0:/SYSTEM/APP/ICOS/DuanXin0.png",
"0:/SYSTEM/APP/ICOS/DuanXin1.png",
};
/**********************************************************************************************************
* 函 数 名: u8 Get_ZhuJieMian_TueBiao(void)
* 功能说明: 获取主界面图片数据
* 形 参:
* 返 回 值: 0 正确 1错误
*********************************************************************************************************
*/
u8 Get_ZhuJieMian_TueBiao(void)
{
u8 res;
u8 i,j;
u32 bread;
//申请文件信息内存
ZhuJieMian_TuBiao_File=(FIL*)mymalloc(SRAMEX,sizeof(FIL));//申请内存
if(ZhuJieMian_TuBiao_File==0)//申请失败 返回失败
{
myfree(SRAMEX,ZhuJieMian_TuBiao_File);
return 1;
}
printf("文件信息内存申请成功\r\n");
//打开所有文件 并读取图片数据
for(i=0;i<ZhuJieMian_TuBiao_NUM;i++)
{
res=f_open(ZhuJieMian_TuBiao_File,(const TCHAR*)ZhuJieMian_TuBiao_Addr,FA_READ); //打开文件
if(res==FR_OK)
{
printf("TuBiao[%d]打开成功\r\n",i);
ZhuJieMian_TuBiao_BUF.TuBiao=(char*)mymalloc(SRAMEX,ZhuJieMian_TuBiao_File->obj.objsize);//申请内存
// printf("TuBiao[%d]:%dB\r\n",i,ZhuJieMian_TuBiao_File->obj.objsize);
if(ZhuJieMian_TuBiao_BUF.TuBiao==0) //内存申请失败
{
printf("TuBiao[%d]内存申请失败\r\n",i);
myfree(SRAMEX,ZhuJieMian_TuBiao_BUF.TuBiao);//释放此图片内存
ZhuJieMian_TuBiao_Flag=0;//标记为无图标
continue; //继续下一次
}
ZhuJieMian_TuBiao_Flag=1; //标记为有图标
f_read(ZhuJieMian_TuBiao_File,ZhuJieMian_TuBiao_BUF.TuBiao,ZhuJieMian_TuBiao_File->obj.objsize,(UINT *)&bread); //读取数据
f_close(ZhuJieMian_TuBiao_File); //关闭文件
printf("TuBiao[%d]获取数据成功\r\n",i);
}else//有一个文件打开失败关闭文件并标记为无图标
{
printf("TuBiao[%d]打开文件失败\r\n",i);
ZhuJieMian_TuBiao_Flag=0;//标记为无图标
f_close(ZhuJieMian_TuBiao_File); //关闭文件
}
}
myfree(SRAMEX,ZhuJieMian_TuBiao_File);
return 0;
}
在开机时先调用此函数然后按钮自绘时直接使用图片数组,加载到SDAM里要比内部FLASH显示快,这个方法即省了FLASH内存又提高的显示速度。
|
|