MTK的图片修改比较简单,图片文件一般都放在plutommi\Customer\Images文件夹下,在该文件夹下,图片又分为两类,一类是放在压缩包里,一类是放在该目录下的文件夹里不压缩的文件。比如Default.bmp和EmptyImage.bmp,就直接放在该文件夹下,有一些SP为了修改方便,也会直接放在文件夹里,而不放在压缩包里,以和MTK系统图片相区分。但这两种文件,在使用上完全一样,调用时一般都是通过ID(gdi_image_draw_id)或者图片路径使用(gdi_image_draw_file)。因为压缩包里的文件在编译时会自动解压到MainLCD文件夹时,所以我们添加图片时,使用的路径不是IMAGE压缩包,而是MainLCD。
MTK支持的图片类型比较广泛,bmp,gif,png,jpg等都支持,还有MTK自己特别的文件格式PBM。调用的方式也十分灵活,可以通过ID(gdi_image_draw_id),也可以通过文件(gdi_image_draw_file),还可以通过文件BUFFER(gdi_image_draw)。但其实调用的最终形式还是gdi_image_draw,不管是文件也好,ID也好,最终都会转为BUFFER调用。这也就是最后我们在MTK文件custimgdatahw.h中看到的数组,我们不管是添加压缩包,还是直接搞在文件夹里的图片,最后都会生成图片数组,放在文件custimgdatahw.h里,文件custimgdatahw.h里定义了系统使用过所有图片的数组,也就是gdi_image_draw使用的所谓BUFFER。说到这一步,许多人就会明白了,似乎总是有一些图片,我们在手机里能看到,在图片文件夹里怎么找也找不到,遇到想替换的情况,费时费力,却只能求救于别人。原因就在于,有一些图片是没有资源的,只有一个数组BUFFER,要想替换,只能找到这个数组。因为MTK最终在系统中画图使用的不是资源,而是这些资源的数组BUFFER,资源只是给人们修改方便而提供的参照。
要修改这些没有资源只有资源数组的东西,只有经验,没有别的技巧。幸运的一点是,这些只有数组没有资源的图片大都集中在文件themecomponents.h中,并且大概只有有限的几个地方会这样调用,大都是一些常见的Theme风格相关的内容,如窗口背景,TITLE背景,SOFT背景,高亮条,状态条背景等。当然有些公司为了修改的方便,把这些令人痛苦东西的做了些改进,一是不使用THEME功能,所有的窗口背景,TITLE背景,SOFT背景,高亮条,状态条背景要么自绘,要么使用资源自己画,要么直接使用custimgdatahw.h里的数组,经过这样的改进,修改维护显然是方便了很多。但这也就造成网上有朋友问我窗口背景图片或者SOFTKEY背景怎么修改时,我无法回答的原因,需要根据不同公司习惯和代码实际情况来分析。一个简单的方法是把某些怀疑对象从数组还原成资源文件进行比对查看,具体实现过程可以参考我的文章《反其道而行之,从数组到资源》。当然如果你对themecomponents.h以及该文件内一些常见的资源BUFFER足够了解,完全可以一步到位。因为这些文件各个公司虽然略有不同,但同一个公司内部却是相对稳定的,改过一次后,有了经验,下次就能闭着眼睛来改了。
顺便提一下常用资源中的PNG和PBM文件,PNG图片有许多优点,最突出的优点的是能够设计更漂亮的UI,但一个最明显的缺点却是需要的空间比较大,PNG在使用时,MTK默认会把其转化为一种BMPA的文件,全部使用PNG设计手机,最终是以牺牲空间为代价的,对于一个靠SP来打价格战的方案公司来说,是一个两难的选择。而且PNG在使用过程中也会遇到一些问题,这一点可以参考我以前的文章。PBM其实是BMP改了扩展名后得来的,是MTK推荐的文件类型,而MTK默认会把一些经常调用的BMP图片直接转为PBM,虽然在文件上看来他还是BMP,但在编译时MTK会修改生成的数组BUFFER,使其变为PBM,比如SI_ALARM.bmp,在文件夹里看时是SI_ALARM.bmp,到custimgdatahw.h看时,发现他被默认的改成了PBM格式。这可以从图片数组__MAINLCD__IDLESCREEN__STATUSICONS__SI_ALARM_BMP里的元素中看到,该BUFFER第一个元素说明的是文件的类型,BMP文件类型是1,PBM类型为28,各种文件类型的对应的值都在文件gdi_const.h中定义。虽然他本质上PBM和BMP没有什么不同,但在显示时,速度上却比BMP快上了许多,由于MTK对PBM的特殊处理,使其在使用时省掉了对BMP解析时间,可以直接拷贝到LCD的BUFFER中显示。想研究详细转化过程的朋友可以研究一下bmploader.c文件。
对文件custimgdatahw.h的研究,可以使我们更深入的了解MTK的图片资源的使用过程,以助于我们解决各种各样的问题。同时也可以自己写程序把图片转为数组BUFFER,减轻我们在编绎资源时漫长的等待过程,这在程序调试阶段是十分有用的。而节约时间和当前许多公司低成本快速出货的理念也是符合的。
如果你想制作MTK图片生成工具,请参考我在CSDN的文章《写一个简单的MTK图片管理工具》
联系客服