关于android 图像格式问题

这算是篇总结吧。6月份开始做的一个android上的ar项目结束了。我做的部分是二维码识别和图像识别的预处理。这个项目虽然很累,但是让我学到了很多东西,特别是严格的编码规则,和java代码的效率优化,以及抗压力能力。

当然这里说的是图片处理时的一些东西。因为在做项目的时候在网上找了很多资料都不完全,甚至很多都会误导别人。所以我觉得有必要总结一下。

首先是android本身支持的图片格式,android本身支持的图片格式只有两种 jpg和png。还有一种格式webp 不能跨平台(这点是听别人说的,我没有验证)。除此以外的格式android都不支持。这里说的支持是指bitmap编码成这两种格式的文件。其他格式的,只要熟悉标准,完全可以自己写。

然后是位图格式,Config.ARGB_8888,ARGB_4444,RGB_565,ALPHA_8,这些都是位图格式。所谓位图,就是bitmap,无压缩的图像格式, ARGB_8888的意思是 每一个像素都由 4个通道来描述,分别是 透明度(alpha),红色(red),绿色(green),蓝色(blue),每一个通道都占8bit,也就是一个字节。剩下的argb_4444,rgb_565 于此类似。

因为位图是无压缩的所以完全可以计算出来文件大小,比如一个 100*100的位图。如果是argb_8888那么他的大小是 4(通道) * 1(8 / 8) * 100 * 100 = 40000byte 。真实的图片应该会略大一些,一般会有40字节的头文件。

剩下的这个alpha_8 这个配置,我个人认为是无用的。因为项目正好需要这个配置的图像文件,ios上是直接有函数对应的,但是安卓上的这个配置不可用,我试了很多办法都不行。而且我在google的官方文档中没有找到相关的相关的声明。这点是大家需要注意的。 如果有知道原因的大神也希望留言给我

还有就是 灰度和黑白的区别,灰度图其实就是亮度图,每个像素由 0-255之间的数字来描述。黑白图的质量就低多了。每个像素 只有1bit ,(0或者1)来描述。

android本身是不支持这两种图的,但是这些都可以手写出来,灰度有转换公式,黑白的话可以先转换成灰度,然后判断小于128 则为0,反之则为1 ,主要是的难点是文件的头部信息格式。

最后是一些常见的图像模式:argb,cmyk(印刷标准),yuv(android摄像机返回的信息),rgb,还有灰度,黑白。

上一篇:Sql server Compact 小型数据库损坏修复


下一篇:后台动态添加的button,如何触发button_click事件?