现在的位置: 首页 > 综合 > 正文

Android 图片资源显示效果研究

2013年09月12日 ⁄ 综合 ⁄ 共 3095字 ⁄ 字号 评论关闭

         

Android支持的图片资源格式及其特性

Android系统支持常见的图片资源格式,如jpg、png、gif等。这几种主要图片格式的特点如下:

1.    Gif格式图片的特点

透明性:Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha 透明)。

动画:Gif这种格式支持动画。

无损耗性:Gif是一种无损耗的图像格式,这也意味着你可以对gif图片做任何操作也不会使  得图像质量产生损耗。

水平扫描:Gif是使用了一种叫作LZW的算法进行压缩的,当压缩gif的过程中,像素是由上到下水平压缩的,这也意味着同等条件下,横向的gif图片比竖向 的gif图片更加小。例如500*10的图片比10*500的图片更加小。

间隔渐进显示:Gif支持可选择性的间隔渐进显示

由以上特点看出只有256种颜色的gif图片不适合照片,但它适合对颜色要求不高的图形(比如说图标,图表等),它并不是最优的选择,我们会在后面中看到png是最优的选择。

2.    Jpeg格式图片特点

透明性、动画:它并不支持透明,也不支持动画。

    损耗性:除了一些比如说旋转(仅仅是90、180、270度旋转),裁切,从标准类型到先进类型,编辑图片的原数据之外,所有其它操作对jpeg图像的处理 都会使得它的质量损失。所以我们在编辑过程一般用png作为过渡格式。

      隔行渐进显示:它支持隔行渐进显示(但是ie浏览器并不支持这个属性,但是ie会在整个图像信息完全到达的时候显示)。
         由上可以看出Jpeg是最适web上面的摄影图片和数字照相机中(android壁纸默认就是jpg的)。

3.    Png格式图片分析

         Png这种图片格式包括了许多子类,但是在实践中大致可以分为256色的png(PNG8)和全色的png(PNG24、 PNG32),你完成可以用256色的png代替gif,用全色的png代替jpeg

      透明性:Png是完全支持alpha透明的(透明,半透明,不透明)。

      动画:它不支持动画

      无损耗性:png是一种无损耗的图像格式,这也意味着你可以对png图片做任何操作也不会使  得图像质量产生损耗。这也使得png可以作为jpeg编辑的过渡格式水平扫描像GIF一样,png也是水平扫描的,这样意味着水平重复颜色比垂直重复颜色的图片更小。

      间隔渐进显示:它支持间隔渐进显示,但是会造成图片大小变得更大

      其它图片格式与PNG比较:众所周知GIF适合图形,JPEG适合照片,PNG系列两种都适合。

A.       相比GIF:PNG 8除了不支持动画外,PNG8有GIF所有的特点,但是比GIF更加具有优势的是它支持alpha透明和更优的压缩。所以,大多数情况下,你都应该用 PNG8不是GIF(除了非常小的图片GIF会有更好的压缩外)。

B.       相比JPEG:JPEG比全色PNG具有更加好的压缩,因此也使得JPEG适合照片,但是编辑JPEG过程中容易造成质量的损失,所以全色PNG 适合作为编辑JPEG的过渡格式。

 

Photoshop制图几个概念:

1.    位深&通道

         在photoshop里,点击图像,模式然后可以选择制图的通道位深。8位、16位、32位有啥区别?和我们常说的24、32位图像是一个概念么?

A.       先说第一个,这里位表示的是红绿蓝三基色分别有2的N(8、16、32)次方个强度。位数越宽,那么它能表示的颜色也就越多,越真实。当然图片的容量就会越大,对图片处理起来需要的时间就越长。还有一个就是所有photoshop内置滤镜都支持8位通道,16、32位通道有的滤镜是不支持的,尤其是第三方外挂的。

B.       第二问的答案当然是否定的。我们可以用三基色来组成任意一种特定的颜色。Photoshop里面的位深指的是基色,我们常说的32位图像指的是特定的一种颜色。我们常见的8位通道RGB图像,3个通道共24位,即一张24位RGB图像里可表现大约1670万种颜色。ARGB就是在原来真彩色的基础上加一个alpha通道,使图像具备可透明性,这样就组成了我们常说的32位图。至于16、32位深一般只在专业领域可能会用到,原理一样,需要了解的,自己算下就ok;

2.    加噪点

         这是一种很凑合的做法,原理就是24位带渐变的真彩图以16位的增强色显示就会出现一圈圈光晕一样的轮廓失真。加入微小噪点,降低图片的清晰度,反而会让光晕失真均衡,从而感官上有一定改善。操作就是点滤镜,杂色,添加杂色,数值最好不超过1.5.

3.    储存为web和设备使用格式

         Photoshop里面专门对web和移动设备进行了相关的适配兼容,原因是像nokia大多的功能机都只支持增强色,所以在这个模式下可以输出相适应的图片资源。Android作为最优秀的移动系统之一,当然完全支持最高的规格,但不排除做一款定位低端,为了节约成本,把设备做成增强色。

Android系统对位宽的支持:

正如上面所说,Android系统对主流图片支援格式都提供良好的支持。源码中分别做了以下定义:

Ø  ALPHA_8:数值为8,图形参数由一个字节来表示, 是8位的位图

Ø  ARGB_4444:4+4+4+4=16,图形的参数由两个字节来表示,是16位的位图.

Ø  ARGB_8888:8+8+8+8=32,图形的参数由四个字节来表示, 是32位的位图.

Ø  RGB_565:5+6+5=16,图形的参数由两个字节来表示, 是16位的位图.

 

ALPHA_8,ARGB_4444,ARGB_8888都是透明的位图,也就是字母A代表Alpha.

ARGB_4444:意味着有四个参数,即A,R,G,B,每一个参数由4bit表示.

ARGB_8888:意味着有四个参数,即A,R,G,B,每一个参数由8bit来表示.

RGB_565:意味着有三个参数,R,G,B,三个参数分别占5bit,6bit,5bit.

Android系统2.2以前的图片默认格式是RGB_565模式,这时候显示真彩图片资源就会产生失真现象,尤其是带了渐变效果;2.3内核升级后,对图片解析默认的模式变成ARGB_8888,真彩图片资源的支持有很大提升。

 

结论:

 

高通2.3和Marvel4.0以上版本默认PixelFormat就是ARGB_8888(32位)的,不会出现失真问题。

   4.0    
2.3

Marvel2.3版本可以有以下几种方案解决(图示失真原因是Marvel2.3的很多代码是从2.2迭代过来的,2.2做的工作得到了延续,但是也引进了很多历史遗留问题,图形引擎GC没做好):

1.    凑合改法(风险小,效果一般)

A. 给渐变图片加微小的噪点。

在Marvel2.3中,两张图片作对比,左边加了1.5的噪点反而看起来更平滑,这个噪点值可能取得更优化的值。

B.UI作图用到渐变效果要尽量真机验证效果。

C.加以下代码:getWindow().setFormat(PixelFormat.RGBA_8888);(ps:直接加在onCreate               中的setContent之前。效果无法保证,个人验证Marvel环境下无法生效)。

2.  彻底改法(风险需评估,效果是彻底的)

   在框架甚至图形库源码(GC)找到和调用设置图片解析模式的代码作评估并修改。

该问题的产生无关乎硬件

Android资源推荐使用png格式

 

抱歉!评论已关闭.