|

楼主 |
发表于 2023-7-13 16:07:54
|
显示全部楼层
硬汉哥,我把流位图放在sd卡里,配上内存设备,发现一个问题,就是用GUI_DrawStreamedBitmapAuto(_acBuffer1, x0, y0)加上内存设备,图片就不显示,而不用内存设备只用GUI_DrawStreamedBitmapAuto图片就显示,我把代码贴出来,您帮我看一下
GUI_HMEM ShowStreamedBitmap2(const char *sFilename, int x0, int y0)
{
char *_acBuffer1= NULL;
GUI_HMEM hMem;
int XSize, YSize;
GUI_MEMDEV_Handle hBMP;
/* 进入临界段 */
taskENTER_CRITICAL();
/* 打开图片 */
result = f_open(&file, sFilename, FA_READ);
if ((result != FR_OK)) {
printf("文件打开失败!\r\n");
_acBuffer1[0]='\0';
}
/* 申请一块动态内存空间 */
hMem = GUI_ALLOC_AllocZero(file.fsize);
/* 转换动态内存的句柄为指针 */
_acBuffer1 = GUI_ALLOC_h2p(hMem);
/* 读取图片数据到动态内存中 */
result = f_read(&file, _acBuffer1, file.fsize, &f_num2);
if (result != FR_OK) {
printf("文件读取失败!\r\n");
}
/* 读取完毕关闭文件 */
f_close(&file);
/* 退出临界段 */
taskEXIT_CRITICAL();
XSize = GUI_BMP_GetXSize(_acBuffer1);
YSize = GUI_BMP_GetYSize(_acBuffer1);
/* 创建内存设备,并将 BMP 图片绘制到此内存设备里面,此内存设备要在主程序中用到
所以退出此函数前,不要释放。
*/
hBMP = GUI_MEMDEV_CreateEx(x0, y0, XSize, YSize, GUI_MEMDEV_HASTRANS);
GUI_MEMDEV_Select(hBMP);
GUI_DrawStreamedBitmapAuto(_acBuffer1, x0, y0);
GUI_MEMDEV_Select(0);
/* 释放动态内存 hMem */
// GUI_ALLOC_Free(hMem);
return hBMP;
}
//窗口回调
case WM_INIT_DIALOG:
//创建内存设备
hMemBMP=ShowStreamedBitmap2("0:/DTA/menu.dta",0,0);
/* 设置为模态窗口 */
WM_MakeModal(hWin);
break;
case WM_PAINT:
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
GUI_MEMDEV_CopyToLCDAt(hMemBMP,0,0);
break;
|
|