做大点的项目,大家肯定遇到图片太多,不能采样原始的方式,将图片用BMPCvt.exe工具转化成.C文件放于单片机的ROM的方式. 这里我以32位的带ALPHA通道的透明背景为例, 比如我想在一个按钮上放一个透明背景的图片.我开始想了两种方式: 第一: 将BMPCvt.exe转换好的.C文件里的数据部分转成BIN文件存储到FLASH,然后要用时将数据全部一次性读出来,放到RAM里面,然后调用类似BUTTON_SetBitmapEx(hWin, BUTTON_BI_UNPRESSED, &bmHistory, 0, 0); bmHistory为软件转换后图片数据结构体GUI_BITMAP, 其中数据元素_acHistory为存储于ROM区域的const数组.本来的想法是想将_acHistory用一个全局数组或动态分配一片能存储整个图片大小的空间的指针代替,试验结果是这个指针只能是const指针,而const区域数据不能更改,这种方式只能做罢.
GUI_CONST_STORAGE GUI_BITMAP bmHistory = {
110, // xSize
110, // ySize
440, // BytesPerLine
32, // BitsPerPixel
//(U8 *)aMemory;
(unsigned char* )_acHistory, // Pointer to picture data
NULL, // Pointer to palette
GUI_DRAW_BMP8888
};
第二种方式是采用原始带ALPHA通道的32位图片数据, 将原始图片BMP数据存储为BIN文件,将BIN数据直接存到FLASH,要显示图片时再读出来, 显示函数当然不能再用BUTTON_SetBitmapEx(),因为它的原型是void BUTTON_SetBitmapEx (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);
图片数据这里是GUI_BITMAP的指针,也就是上一种图片存储在ROM的方式. 这里我想用BUTTON_SetBMP(hWin, 0, (unsigned long*)bmHistory);直接显示位图数据流.实验结果,图片是能显示出来,但是我的位图是32位带ALPHA通道的,而实际显示透明底显示不出来! 哪位有更好的办法解决这个问题?
|