概念解释
RGB颜色模型: 最常见的颜色模型,设备相关。R、G、B分别代表红、绿和蓝色三种颜色通道,取值均为[0,255]。
RGB 8位色: 表示使用8位(bit)表示颜色,一共能表示2^8 = 128种颜色。
依次类推RGB 16位色,RGB 24位色,RGB 32位色,使用的位数越多,能表示的颜色越多,24位能表示的颜色数量已经很多了,称之为“真彩色”。
32位和24位能表示的颜色一样多,多一个了透明度。
Android Bitmap使用的三种颜色格式:
- ALPHA_8–每个像素占1个字节,存储透明度信息,没有颜色信息。
- RGB_565--每个像素占2个字节存储颜色信息,R 5位,G 6位,B 5位,能表示2^16种颜色。
- ARGB_8888--每个像素占4个字节存储颜色信息,A R G B各一个字节,能表示2^24种颜色,还有一个字节存储透明度信息。
压缩原理
在Android中进行图片压缩是非常常见的开发场景,主要的压缩方法有两种:其一是下采样压缩,其二是质量压缩。前者是降低图像尺寸,改变图片的存储体积;而后者则是在不改变图片尺寸的情况下,通过损失颜色精度,达到相同目的。
下采样压缩
图片尺寸的修改其实就是通过修改像素数,放大的过程称之为上采样,缩小的过程称之为下采样。在这里,我们只讨论下采样。下采样压缩是通过减少图片的像素数的来减小Bitmap内存占用。
1.使用Options.inSampleSize
代码示例:
BitmapFactory.Options options =
new
BitmapFactory.Options();
options.inSampleSize =
2
;
Bitmap bitmap = BitmapFactory.decodeFile(
"/sdcard/test.png"
);
Bitmap compress = BitmapFactory.decodeFile(
"/sdcard/test.png"
, options);
|
当采样率为inSampleSize = 2时,Bitmap内存宽高各减少一半,内存占用是不缩放情况下的1/4。
关于采样率的选择参考Android官方指南高效加载大图,主要分为两步:
探测图片宽高
BitmapFactory.Options options =
new
BitmapFactory.Options();
options.inJustDecodeBounds =
true
;
|