Segger为emWin提供了BMP转换工具,可以直接生成C流文件。先准备一张BMP图片,大小不要超过屏幕的大小,我是在VS里面使用的模拟器,屏幕的大小设置为800*480。
打开BmpCvt这个软件,然后
File--Open,打开Bmp文件
Image--Convert to RGB。这里可以根据需要设置成其它
File--Save as--"C" Stream (*.dta),这样就在图片所在的文件夹里生成了相应的dta文件。至于这个C流文件 ,我的理解是软件先帮我们解码好了,当然是按照emWin已经设定好的格式去解码的。这样我们在使用的时候只需要直接读取,然后就可以显示出来了,速度相对来说快一点。
#include "GUI.h" #include "stdio.h"
void MainTask(void) { FILE *fp; GUI_ALLOC_DATATYPE hMem; char *_acBuffer; int size;
GUI_Init(); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetFont(&GUI_Font24_ASCII);
/*只读方式打开流文件*/ fp = fopen("./MyTest/temp.dta", "r"); /*检测打开的结果*/ if (NULL == fp) { GUI_DispString("File open is error!"); } else { GUI_DispString("File open is ok!\n"); /*移动文件指针到结束*/ fseek( fp, 0L, SEEK_END ); /*获取偏移量即文件的大小*/ size = ftell( fp ); /*重新设置移动位置*/ fseek( fp, 0L, SEEK_SET ); /*申请和文件大小一样的内存*/ hMem = GUI_ALLOC_AllocZero(size); /*把申请到的内存转换成指针*/ _acBuffer = GUI_ALLOC_h2p(hMem); /*把文件读取到缓存*/ fread(_acBuffer, size, 1, fp); /*关闭文件*/ fclose(fp); /*直接显示出来*/ GUI_DrawStreamedBitmapAuto(_acBuffer, 0, 0); /*释放申请的内存*/ GUI_ALLOC_Free(hMem); }
while (1) { GUI_Delay(1000); } }
显示效果如下图:
转自