|
楼主 |
发表于 2017-5-16 08:43:41
|
显示全部楼层
- /*
- *********************************************************************************************************
- * 函 数 名: _ShowBMP
- * 功能说明: 显示 BMP 图片
- * 形 参: sFilename 要读取的文件名
- * x 要显示的 x 轴坐标位置
- * y 要显示的 y 轴坐标位置
- * 返 回 值: 返回绘制了 BMP 图片的内存设备句柄。
- *********************************************************************************************************
- */
- GUI_HMEM _ShowBMP(const char * sFilename, int x, int y)
- {
- GUI_HMEM hMem;
- char *_acBuffer;
- UINT bw;
- int XSize, YSize;
- GUI_MEMDEV_Handle hMemBMP;
-
- /* 打开文件 */
- result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
- if (result != FR_OK)
- {
- printf("\\n文件打开失败!\\n");
- return 0;
- }
-
- /* 申请一块内存空间 并且将其清零 */
- hMem = GUI_ALLOC_AllocZero(file.fsize);
- /* 将申请到内存的句柄转换成指针类型 */
- _acBuffer = GUI_ALLOC_h2p(hMem);
-
- result = f_read(&file, _acBuffer, file.fsize, &bw);
- if (result != FR_OK)
- {
- printf("\\n图片读取失败!\\n");
- return 0;
- }
-
- XSize = GUI_BMP_GetXSize(_acBuffer);
- YSize = GUI_BMP_GetYSize(_acBuffer);
-
- /*
- ** 创建内存设备,并将 BMP 图片绘制到此内存设备里面,此内存设备要在主程序中用到
- ** 所以退出此函数前,不要释放。
- */
- //就是这句出错了!!函数返回不是0,句柄一直是0。
- 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);
-
- GUI_ALLOC_Free(hMem);
- f_close(&file);
-
- return hMemBMP;
- }
- void drawBMP(void)
- {
- GUI_MEMDEV_Handle hMemBMP;
- // uint32_t t0, t1, i, count = 0;
- // char buf[50];
- // printf("正在加载BMP图片到内存....\\r\\n");
- // /* 加载 BMP 图片到内存设备 */
- // hMemBMP = _ShowBMP("0:/2.bmp", 0, 0);
- // /*刷新 20 次,串口打印速度数值,时间单位 ms */
- // for(i = 0; i < 20; i++)
- // {
- // t0 = GUI_GetTime();
- // /* 用到 BMP 图片的时候,调用此函数即可 */
- // GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);
- // t1 = GUI_GetTime() - t0;
- // printf("速度 = %dms\\r\\n", t1);
- // count += t1;
- // }
- // /* 求出刷新 20 次的平均速度 */
- // sprintf(buf, "speed = %dms/frame", count/i);
- // GUI_DispStringAt(buf, 10, 10);
-
- GUI_SetBkColor(GUI_WHITE);
- GUI_Clear();
- hMemBMP = _ShowBMP("0:/sunset.bmp", 0, 0);
- GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);
- printf("\\n显示SD卡图片!\\n");
- GUI_Delay(100);
- }
复制代码 |
|