|
用emwin测试10几张图片轮流显示,sdram的内存设置4M byte,不管显示jpg还是bmp,一开始几张图片很快,约20ms,分辨率800X480,之后就很慢,约1-2秒,重新初始化gui也不行,必须重启机器,从打印信息看,是内存分配不到,函数ShowBMP返回一直显示地址为0。若把sdram的emwin内存设置8M,那么图片快可以多显示几张,后边又开始慢了。程序如下,不知道改哪里,没思路。。。。
GUI_HMEM ShowBMP(const char *sFilename, int x, int y)
{
char *_acBuffer;
int XSize, YSize;
GUI_HMEM hMem;
GUI_MEMDEV_Handle hMemBMP;
uint32_t len=0,i;
FPic =fopen(sFilename, "r" );
if(FPic == NULL){
return 0;
}
/* 申请一块内存空间 并且将其清零 */
hMem = GUI_ALLOC_AllocZero(1536000);
/* 将申请到内存的句柄转换成指针类型 */
_acBuffer = GUI_ALLOC_h2p(hMem);
print(0,"hMem=%x\n",_acBuffer );
for(i=0;;i++){
if( fread(_acBuffer+i,1, 1, FPic)==0){
break;
}
else {
len++;
}
}
XSize = GUI_BMP_GetXSize(_acBuffer);
YSize = GUI_BMP_GetYSize(_acBuffer);
print(0,"bmp XSize=%u y=%u \n",XSize,YSize);
/* 创建内存设备,并将BMP图片绘制到此内存设备里面,此内存设备要在主程序中用到
所以退出此函数前,不要释放。
*/
hMemBMP = GUI_MEMDEV_CreateEx(0, 0, XSize, YSize, GUI_MEMDEV_HASTRANS);
GUI_MEMDEV_Select(hMemBMP);
GUI_BMP_Draw(_acBuffer, 0, 0);
GUI_MEMDEV_Select(0);
/* 释放动态内存hMem */
GUI_ALLOC_Free(hMem);
// print(0,"hMem=%x\n",hMem);
/* 关闭文件 */
fclose(FPic);
return hMemBMP;
}
void Display_BMP(void)
{
GUI_MEMDEV_Handle hMemBMP;
uint32_t t0, t1, i, count = 0;
GUI_DispStringAt("Load BMP File to Memory Devices....", 10, 10);
/* 加载BMP图片到内存设备 */
hMemBMP = ShowBMP("U0:\\1.bmp", 0, 0);
print(0,"hMemBMP= %x\r\n", hMemBMP);
/*刷新20次,串口打印速度数值,时间单位ms */
//for(i = 0; i < 20; i++)
{
t0 = GUI_GetTime();
/* 用到BMP图片的时候,调用此函数即可 */
GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);
t1 = GUI_GetTime() - t0;
print(0,"speed = %dms\r\n", t1);
count += t1;
}
/* 求出刷新20次的平均速度 */
//print(0, "speed = %dms/frame", count/i);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|