本章讲述在android开发中,图片处理方面的优化。包括知识点为大图加载,图片压缩,图片缓存处理及开源图片处理框架Universal-Image-Loader。1.图片引发的内存不足 当在android应用中加载一张高分辨率的图片时,十分容易出现Out of m ...
本章讲述在android开发中,图片处理方面的优化。包括知识点为大图加载,图片压缩,图片缓存处理及开源图片处理框架Universal-Image-Loader。
1.图片引发的内存不足
当在android应用中加载一张高分辨率的图片时,十分容易出现Out of memory(OOM),这是由于内存溢出造成的,每个应用所使用的堆内存大小一般是固定的,有的是16M,有的可能会大些。那为什么这么大内存加载一张图片会溢出呢?原因就是android在加载图片的时候是使用位图来放到内存中的,那位图在内存中的占用空间计算就是分辨率*每个像素占用的内存。
- ALPHA_8:每个像素占用1byte内存
- ARGB_4444:每个像素占用2byte内存
- ARGB_8888:每个像素占用4byte内存
- RGB_565:每个像素占用2byte内存
如果一个图片的分辨率是1024*768,采用ARGB_8888,那么占用的空间就是 1024*768*4=3MB,这张图片需要占用3M的内存空间,对于这样的图片,如果只加载一样的话,内存还能应付的过来,如果分辨率更高。例如:3648*2736的一样照片,内存占用为3648*2736*4=33MB,这一张图片就是占用33MB的空间,肯定会导致内存溢出。 那应该如何处理呢?
- 降低图片加载到内存时的图片大小(分辨率)。
- 采用更节省内存的编码,例如ARGB_4444。
- 如果是加载大量图片的话,还可以采用缓存。
2.BitmapFactory.options类介绍
BitmapFactory.Options为BitmapFactory的一个内部类,它主要用于设定与存储BitmapFactory加载图片的一些信息。下面是Options中需要用到的属性:
- options.inJustDecodeBounds:如果设置为true,将不把图片的像素数组加载到内存中,仅加载一些额外的数据(如图片大小)到Options中。
- options.outHeight:图片的高度。
- options.outWidth:图片的宽度。
- options.inSampleSize:如果设置,图片将依据此采样率进行加载,不能设置为小于1的数。例如设置为4,分辨率宽和高将为原来的1/4,这个时候整体所占内存将是原来的1/16。
- options.inDither:设置为false不进行图片抖动处理
- options.inPreferredConfig:设置为null 让解码器以最佳方式解码
对于大图片处理时,一般通过压缩方式显示在移动设备上。如指定图片按照固定大小展示处理代码如下:
1 //大图片压缩为宽,高200px的图像展示2 BitmapFactory.Options options = new Options(); 3 options.inJustDecodeBounds = true; 4 BitmapFactory.decodeResource(rs, R.drawable.a2,options); 5 options.inPreferredConfig = Bitmap.Config.ARGB_4444; 6 options.inSampleSize = calculateInSampleSize(options, 200, 200); //获取压缩倍数7 options.inJustDecodeBounds = false; 8 Bitmap bitmap = BitmapFactory.decodeResource(rs, R.drawable.a2,options); 9 iv.setImageBitmap(bitmap); //图片绑定
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:android 图片性能优化
关键词:Android
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。