|
发表于 2019-10-12 08:33:37
|
显示全部楼层
char _ShowAngleBitMap(char _Item)
{
u32 _ReadAddr=0x20000;
GUI_HMEM hMem;
uint8_t *_acBuffer;
uint8_t _acBuffer2[4];
int size=1024*10; //hope small than 16KB
if(0 == _Item) _ReadAddr = 0x20000;
else if(1 == _Item) _ReadAddr = 0x28000;
else if(2 == _Item) _ReadAddr = 0x30000;
SPI_FLASH_BufferRead(_acBuffer2, _ReadAddr, 2);
if((0x42 ==_acBuffer2[0])&&(0x4d ==_acBuffer2[1]))//dta file
{
hMem = GUI_ALLOC_AllocZero(size);
/*把申请到的内存转换成指针*/
_acBuffer = GUI_ALLOC_h2p(hMem);
SPI_FLASH_BufferRead(_acBuffer, _ReadAddr, size);
if(0 == _Item) GUI_DrawStreamedBitmapAuto(_acBuffer, 5, 133);
else if(1 == _Item) GUI_DrawStreamedBitmapAuto(_acBuffer, 110, 133);
else if(2 == _Item) GUI_DrawStreamedBitmapAuto(_acBuffer, 215, 133);
GUI_ALLOC_Free(hMem);
return 1;
}
else return 0;
}
唠叨多说两句:
1.内部flash不够用,界面想漂亮一点,考虑图片数据生成dta文件存放在 flash。
2.注意刷图的时序,避开emWin最耗内存的时候去加载。(刚开始不清楚机制可能会才坑,加载一张13KB的图片不够内存加载。。)
3.如果菜单使用了三张图片,80*100,平均起来9KB*3 = 27KB,又出现内存的困境。(如参考程序,三个编号,加载一个,显示一个,自己做好标志位发消息循环。这种情况只能牺牲刷图同时性)
其他:如果图片质量要求不细腻,其实可以优化图片的色彩、无简便,做成4位彩图会小非常多。 |
|