|

楼主 |
发表于 2020-9-18 16:35:34
|
显示全部楼层
static void _ShowStreamBitmap(const char *sFilename, int x, int y)
{
char *_acBuffer;
GUI_HMEM hMem;
FRESULT result;
#if !defined Method1
GUI_BITMAP Bitmap;
GUI_LOGPALETTE Palette;
#endif
/* 打开文件 */
result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
if (result != FR_OK)
{
return;
}
/* 申请一块内存空间 并且将其清零 */
hMem = GUI_ALLOC_AllocZero(file.fsize);
/* 将申请到内存的句柄转换成指针类型 */
_acBuffer = GUI_ALLOC_h2p(hMem);
/* 读取文件到动态内存 */
result = f_read(&file, _acBuffer, file.fsize, &bw);
if (result != FR_OK)
{
return;
}
/*启用对所有流位图格式的支持*/
WIDGET_EnableStreamAuto();
/* 关闭文件 */
f_close(&file);
/* 显示方法一 */
#if defined Method1
GUI_DrawStreamedBitmapAuto(_acBuffer, x, y);
/* 显示方法二 */
#elif defined Method2
GUI_CreateBitmapFromStream(&Bitmap, &Palette, _acBuffer);
GUI_DrawBitmap(&Bitmap, x, y);
/* 显示方法三 仅支持RGB565格式的图片显示 */
#elif defined Method3
GUI_CreateBitmapFromStream565(&Bitmap, &Palette, _acBuffer);
GUI_DrawBitmap(&Bitmap, x, y);
#endif
/* 释放动态内存,这里有两点注意事项:
1. 如果这个流位图是一直要使用的,动态内存是不可以释放的。
2. 如果使用的是方法2或者方法3进行显示,且此流位图是要一直使用,变量
GUI_BITMAP Bitmap和GUI_LOGPALETTE Palette不可以定义成局部变量,因为
退出函数后,局部变量就被释放给栈空间了。
*/
// GUI_ALLOC_Free(hMem);
}
然后我在WM_PAINT里调用函数_ShowStreamBitmap("UI11.dta", 0, 0);显示图片就变成白屏了这是怎么回事? |
|