辛苦了两天,终于将emWin的ILI9341的驱动移植好了,并且修改了一点底层的驱动,让它跑起来稍微顺畅一些。偏题了。此处,主要是讲解一下如何利用emWin进行BMP图片显示。
为什么要单独的将这个提出来,是因为很多客户就是利用BMP图片,进行GUI显示的。例如ICON等图标都是小BMP图片。如下,主要是如何将BMP图片,转成emWin支持的方式,最终显示到TFT屏上的。
硬件准备: GG DK 3750或则已经将emWin移植好的硬件
软件准备: efm32lib, emWin库,emWin手册,emWin工具 - BmpCvt.exe
备注:其实一下的步骤,emWin手册里有讲解。大家也可参考。
1. 由于EFM32支持的16bit的TFT屏,因此,我先从网络上下载2张16bit的BMP图片。分别改名为Test1.bmp, Test2.bmp。除了位深之外,BMP还有其他的要求,否则emWin的工具转不了。
1. 1, 4 or 8 bits per pixel (bpp) with palette;
2. 16, 24 or 32 bpp without palette (full-color mode, in which each color is assigned an RGB value);
3. RLE4 and RLE8;
注: RLE4,RLE8是图形压缩算法。emWin本身就支持这种算法。
2.使用BmpCvt.exe工具,将各个图片转成相应的C文件. emWin有关的工具,都在Simplicity Studio工具目录下的reptile\emwin\exe文件夹下面。
a. 找到BmpCvt.exe之后,双击打开。
b. File -> Open 载入Test1.bmp图片,
c. File -> Save as
d. 在Save as窗口中的保存类型下拉菜单中,选择"C" bitmap file(*c), 点击保存.
e. 在弹出来的窗口中,选择保存的格式。这里首先看硬件上的TFT是几位的。是555,还是565,或则是24bit的真彩色。接下来就是红色和蓝色的bit位置是否需要调换,这个也得按照具体的驱动来。最后compressed代表产生的数组是否压缩过。压缩算法就是RLE4或RLE8。
f. 压缩的目的是用时间换空间,因此压缩过的bmp在刷屏的时候,由于处理方式不一样,因此显示的效率比较低,看起来刷的比较慢。
g. 最后一点就是并不是所有的图片都合适压缩的。举个例子,如果bmp图片呢是美女加风景的复杂图片的话,压缩的效率其实并不高。如果一行里面有很多像素是一样的话,而这样的行有很多的话,那么压缩的比例就会很高。
h. 如果不想弄清楚红色和蓝色是否需要调换,那么就先产生一个,看颜色是否对,然后再修正便是。当然TFT本身的寄存器配置要对才行。。
I. 这里先选择High Color(565) 选项,不选择压缩,最后保存。
J. 重复一次,将Test2.bmp转成C文件。
3. 利用GG DK下面的Example - guidemo , 用include的方式Test1.c,Test2.c包含进工程里面。
#include "Test1.c"
#include "Test2.c"
int main(void)
{
CHIP_Init();
GUI_Init();
GUI_Clear();
while(1)
{
GUI_DrawBitmap(&bmTest1,0,0);
GUI_Delay(2000);
GUI_DrawBitmap(&bmTest2,0,0);
GUI_Delay(2000);
}
return(0);
}
4. 完毕,如下图所示(Demo使用的图片,版权属于原作者)。嘻嘻,高达啊。。