|
- void ShowGIF(IsrtTp_e eGuiIsrtTp,const TCHAR* puFile,u8* pucFlg,u32 uiX,u32 uiY)
- {
- uint16_t i = 0;
- uint32_t t0, t1,bw,uiFileSize;
- char *_acBuffer;
- GUI_HMEM hMem;
- FRESULT result;
- FIL file;
- GUI_GIF_INFO InfoGif;
- GUI_GIF_IMAGE_INFO ImagInfoGif;
- GUI_MEMDEV_Handle hMemDev;
- /* 打开文件 */
- result = f_open(&file, (const TCHAR*)puFile, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
- if (result != FR_OK)
- {
- ERROR("f_open(%s)=%d\n",puFile,result);
- return;
- }
- /* 申请一块内存空间 并且将其清零 */
- uiFileSize = f_size(&file);
- hMem = GUI_ALLOC_AllocZero(uiFileSize);
- /* 将申请到内存的句柄转换成指针类型 */
- _acBuffer = GUI_ALLOC_h2p(hMem);
- /* 读取文件到动态内存 */
- result = f_read(&file, _acBuffer, uiFileSize, &bw);
- if (result != FR_OK)
- {
- ERROR("f_read(%s)=%d\n",puFile,result);
- return;
- }
- g_tIndieUrtSnd.eIsrtTp = ISRT_TP_NONE;
- GUI_GIF_GetInfo(_acBuffer, uiFileSize, &InfoGif);
- printf("!!!!InfoGif.NumImages=%d\n",InfoGif.NumImages);
- hMemDev = GUI_MEMDEV_Create(uiX, uiY, 46, 105);
- while(*pucFlg)
- {
- /*有两种情况跳出动图:
- 1.插入介质的类型和GUI提示一致
- 2.gui提示插入试纸时,如果插入的是密码牌,则更新密码牌,进入显示code界面
- */
- if((eGuiIsrtTp == g_tIndieUrtSnd.eIsrtTp) ||
- ((ISRT_TP_PAPER == eGuiIsrtTp) && (ISRT_TP_PWD == g_tIndieUrtSnd.eIsrtTp)))
- {
- if(eGuiIsrtTp == g_tIndieUrtSnd.eIsrtTp)
- {
- printf("break gif:eGuiIsrtTp == g_tIndieUrtSnd.eIsrtTp=%d\n",eGuiIsrtTp);
- }
- break;
- }
- /* 变量用来设置当前播放的帧数, InfoGif.NumImages 是 GIF 图片总的帧数 */
- if(i < InfoGif.NumImages)
- {
- /* 获取当前帧 GIF 图片信息,注意第 4 个参数是从 0 开始计数的 */
- GUI_GIF_GetImageInfo(_acBuffer, uiFileSize, &ImagInfoGif, i);
-
- printf("!!!!ImagInfoGif.Delay=%d\n",ImagInfoGif.Delay);
- /* 如果此帧延迟时间是 0,默认是延迟 100ms */
- if(ImagInfoGif.Delay == 0)
- {
- GUI_Delay(100);
- }
- else
- {
- t0 = GUI_GetTime();
- /* 解码并显示此帧 GIF 图片,注意第 5 个参数是从 0 开始计数的 */
- GUI_MEMDEV_Select(hMemDev);
- GUI_GIF_DrawSub(_acBuffer,uiFileSize,uiX,uiY,i++);
- GUI_MEMDEV_Select(0);
- GUI_MEMDEV_CopyToLCDAt(hMemDev, uiX, uiY);
- /* 获取本次解码和显示消耗的时间 */
- t1 = GUI_GetTime() - t0;
- /* 如果 GIF 的解码和显示的时间超时就不做延迟 */
- if (t1 < ImagInfoGif.Delay * 10)
- {
- GUI_Delay(ImagInfoGif.Delay * 10 - t1);
- }
- }
- }
- else
- {
- GUI_MEMDEV_Select(hMemDev);
- GUI_ClearRect(uiX,uiY,uiX+46,uiY+105);
- GUI_MEMDEV_Select(0);
- i = 0;
- }
- }
- /* 实际应用中,根据实际情况释放动态内存 */
- GUI_ALLOC_Free(hMem);
- f_close(&file);
- }
复制代码 对于paper_cho.gif 显示很流畅, 对于 pwd_cho.gif 有些闪烁,同样的代码。请问这该从何查起,谢谢
|
-
-
|