|

楼主 |
发表于 2019-1-23 18:08:10
|
显示全部楼层
本帖最后由 溪云初_VS28s 于 2019-1-23 18:13 编辑
汉哥,我现在已经使用了存储设备,先创建存储设备,然后选择其返回句柄,绘制图片。然后选择LCD,再执行存储设备绘制到LCD的操作。也使能了多缓冲。刷1024*600的效果依然感觉很慢。
int displyjpeg(u8 *JPEGFileName,u8 mode,u32 x,u32 y,int member,int denom)
{
u16 bread;
char *jpegbuffer;
char result;
int XSize,YSize;
GUI_JPEG_INFO JpegInfo;
//存储设备的句柄
uint32_t t0, t1, i, count = 0;
GUI_HMEM hMem;
GUI_MEMDEV_Handle hMemBMP;
float Xflag,Yflag;
#if SYSTEM_SUPPORT_OS
CPU_SR_ALLOC();
#endif
result = f_open(&JPEGFile,(const TCHAR*)JPEGFileName,FA_READ); //打开文件
//文件打开错误或者文件大于JPEGMEMORYSIZE
if((result != FR_OK) || (JPEGFile.obj.objsize>JPEGMEMORYSIZE)) return 1;
jpegbuffer=mymalloc(SRAMEX,JPEGFile.obj.objsize); //申请内存
if(jpegbuffer == NULL) return 2;
#if SYSTEM_SUPPORT_OS
OS_CRITICAL_ENTER(); //临界区
#endif
result = f_read(&JPEGFile,jpegbuffer,JPEGFile.obj.objsize,(UINT *)&bread); //读取数据
if(result != FR_OK) return 3;
#if SYSTEM_SUPPORT_OS
OS_CRITICAL_EXIT(); //退出临界区
#endif
GUI_JPEG_GetInfo(jpegbuffer,JPEGFile.obj.objsize,&JpegInfo); //获取JEGP图片信息
XSize = JpegInfo.XSize; //获取JPEG图片的X轴大小
YSize = JpegInfo.YSize; //获取JPEG图片的Y轴大小
//Edit by zhao
hMemBMP = GUI_MEMDEV_CreateEx(0, 0, XSize, YSize, GUI_MEMDEV_HASTRANS);
GUI_MEMDEV_Select(hMemBMP);
switch(mode)
{
case 0: //在指定位置显示图片
if((member == 1) && (denom == 1)) //无需缩放,直接绘制
{
GUI_JPEG_Draw(jpegbuffer,JPEGFile.obj.objsize,x,y); //在指定位置显示JPEG图片
}else //否则图片需要缩放
{
GUI_JPEG_DrawScaled(jpegbuffer,JPEGFile.obj.objsize,x,y,member,denom);
}
break;
case 1: //在LCD中间显示图片
if((member == 1) && (denom == 1)) //无需缩放,直接绘制
{
//在LCD中间显示图片
GUI_JPEG_Draw(jpegbuffer,JPEGFile.obj.objsize,(lcddev.width-XSize)/2-1,(lcddev.height-YSize)/2-1);
}else //否则图片需要缩放
{
Xflag = (float)XSize*((float)member/(float)denom);
Yflag = (float)YSize*((float)member/(float)denom);
XSize = (lcddev.width-(int)Xflag)/2-1;
YSize = (lcddev.height-(int)Yflag)/2-1;
GUI_JPEG_DrawScaled(jpegbuffer,JPEGFile.obj.objsize,XSize,YSize,member,denom);
}
break;
}
//Edit by zhao
GUI_MEMDEV_Select(0);
t0 = GUI_GetTime();
GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);
t1 = GUI_GetTime() - t0;
//GUI_DispStringAt("速度 = ms\r\n", 50,50);
GUI_DispDecAt(t1, 50 ,50, 4);
f_close(&JPEGFile); //关闭JPEGFile文件
myfree(SRAMEX,jpegbuffer); //释放内存
return 0;
}
|
|