android知识点总结--图片处理

1. 图片格式概述:

(1)BMP:高质量绘图  保证原图质量,用于相机等
       BMP格式图片是有一个一个的像素点组成,每一个像素都是一个颜色.而每一个像素显示的颜色用的二进制位也不相同,这个像素位称之为位深,位深越大,表示每一个像素点所用的二进制位越多,显示的图像也就越清晰。

(2)png:较高质量绘图  体积小,适用于网络传输
      png图片是将bmp图片进行压缩,其压缩格式类似于rar压缩——将相同的byte信息合并表示。png图片可以还原,是无损的压缩方式。

(3)jpg:良好的绘图质量  体积小,便于传输
       jpg格式图片也是对bmp图片进行压缩,因为眼睛的精度是有限的,jpg利用这一点将很多颜色相近的用同一颜色标识,而对于一大块相同的颜色,则用一个值表示。jpg格式图片不能被还原。

2. 四种色彩格式

ARGB_8888:ARGB分别代表的是透明度,红色,绿色,蓝色,每个值分别 用8bit来记录,也就是一个像素会占用4byte,共32bit.

ARGB_4444:ARGB的是每个值分别用4bit来记录,一个像素会占用 2byte,共16bit.

RGB_565:R=5bit,G=6bit,B=5bit,不存在透明度,每个像素会占用2byte, 共16bit.

ALPHA_8:该像素只保存透明度,会占用1byte,共8bit.

在实际应用中而言,建议使用ARGB_8888以及RGB_565。 如果你不需要透明度,选择RGB_565,可以减少一半的内存占用.

bitmap所占内存大小计算方式:

图片长度 x 图片宽度 x 一个像素点占用的字节数

3. 质量压缩

ByteArrayOutputStream baos = new ByteArrayOutputStream();//内存流bitmapOld.compress(CompressFormat.JPEG, quality, baos);//quality为压缩百分比//quality=50,意为压缩为1/2
byte[] bytes = baos.toByteArray();
bitmapNew= BitmapFactory.decodeByteArray(bytes,0, bytes.length);//生成图片对象

      通过此种方式,图片的大小是没有变的,因为质量压缩不会减少图片的像素,它是在保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,这也是为什么该方法叫质量压缩方法。图片的长,宽,像素都不变,那么bitmap所占内存大小是不会变的。

      如果是bit.compress(CompressFormat.PNG, quality, baos);这样的png格式,quality就没有作用了,bytes.length也不会变化,因为png图片是无损的,不能进行压缩。

4. 采样率压缩

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize=2;    //inSampleSize 为压缩比        此处为1/2
bm =BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/Camera/test.jpg", options);

      设置inSampleSize的值(int类型)后,假如设为2,则宽和高都为原来的1/2,宽高都减少了,图片总像素就减少了,自然内存也降低了。数值越高,压缩的图片就越小,2表示宽高变为原来的1/2,内存变为1/4;

       Glide默认加载图片时是通过将图片转换成ImageView的大小后再加载。

       Picasso默认是加载了全尺寸的图片到内存,然后让GPU来实时重绘大小(也可以手动设置或者将scaletype设置成  centerCrop等)。

5. 缩放法压缩

Matrix matrix = new Matrix();
matrix.setScale(0.5f,0.5f);
bm = Bitmap.createBitmap(bit,0,0, bit.getWidth(),bit.getHeight(), matrix, true);

bitmap的长度和宽度分别缩小了一半,图片大小缩小了四分之一;

计算压缩比:要压缩的尺寸/实际尺寸

6. RGB_565法

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig= Bitmap.Config.RGB_565;  //将格式设置成RGB_565
bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath()                    +"/Camera/test.jpg", options);

通过改用内存占用更小的编码格式来达到压缩效果,默认ARGB_8888, 用RGB_565能省一半内存;

Glide默认的Bitmap格式就是RGB_565

Picasso是ARGB_8888

7. createScaledBitmap

//这里是将图片压缩成我们所期望的长度和宽度(150,150)。
bitmapNew=Bitmap.createScaledBitmap(bitmapOld,150,150,true);

图片的内存大小相应也发生了改变,但图片可能不清晰;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值