mtk将图片转成数组buffer

我们一般不采取MCT工具转,因为这工具需要整套的图片,而单张转比较麻烦,而且PNG的转出来可能有问题,所以我们采用如下的方式转换:
所有的图片资源,当你 Resgen 后,都会转换成 C  代码存在 Custimgdatahw.h 里面,比如主菜单的 “通话记录”(calllog)在里面的数组名就是:__MAINLCD__MAINMENU__MATRIX__MM_CALLHISTORY_PNG ,所以,我们可以把需要改的图片替代主菜单的通话记录的图片(格式不一定一致),然后压缩打包,resgen后, 去Custimgdatahw.h找到修改的数组,就是你所需要的二进制文件。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,减轻我们在编绎资源时漫长的等待过程,这在程序调试阶段是十分有用的。而节约时间和当前许多公司低成本快速出货的理念也是符合的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值