Bitmap基本概念
1.Bitmap是Android系统中图像处理的最重要类之一。
2.通过Bitmap我们可以获取图片信息(如像素值)。
3.获得到信息后,可以对Bitmap进行缩放,裁剪等操作。
总结:Bitmap给我们提供了对图像文件的操作支持
Bitmap加载方式
BitmapFactory.options常用参数
boolean inJustDecodeBounds :如果设置为true,不获取图片,不分配内存,但会返回图片的高度宽度信息。如果将这个值置为true,那么在解码的时候将不会返回bitmap,只会返回这个bitmap的尺寸。这个属性的目的是,如果你只想知道一个bitmap的尺寸,但又不想将其加载到内存时。这是一个非常有用的属性。
int inSampleSize(采样率):图片缩放的倍数, 当它小于1的时候,将会被当做1处理,如果大于1,那么就会按照比例(1 / inSampleSize)缩小bitmap的宽和高、降低分辨率,大于1时这个值将会被处置为2的倍数。例如,width=100,height=100,inSampleSize=2,那么就会将bitmap处理为,width=50,height=50,宽高降为1 / 2,像素数降为1 / 4。
Bitmap.Config inPreferredConfig:设置解码器,这个值是设置色彩模式,默认值是ARGB_8888,在这个模式下,一个像素点占用4bytes空间,一般对透明度不做要求的话,一般采用RGB_565模式,这个模式下一个像素点占用2bytes。
加载方式
1.从本地(SDcard)文件读取(BitmapFactory.decodeFile)
2.从输入流中读取文件(网络加载) ( BitmapFactory.decodeStream)
3.Resource资源加载(BitmapFactory.decodeResource)
4.从二进制数据读取图片( BitmapFactory.decodeByteArray)
/**
* @param filePath 图片地址
* @param pixelWidth 显示的宽
* @param pixelHeight 显示的高
* @return
*/
public static Bitmap getRationalBitmap(String filePath,int pixelWidth,int pixelHeight) {
BitmapFactory.Options options =new BitmapFactory.Options();
//只加载图片信息
options.inJustDecodeBounds =true;
options.inPreferredConfig = Bitmap.Config.RGB_565;
//预加载bitmap
BitmapFactory.decodeFile(filePath, options);
int srcWidth = options.outWidth;
int srcHeight = options.outHeight;
options.inSampleSize =getSimpleSize(srcWidth, srcHeight, pixelWidth, pixelHeight);
options.inJustDecodeBounds=false;
return BitmapFactory.decodeFile(filePath, options);
}
private static int getSimpleSize(int srcWidth,int srcHeight,int pixelWidth,int pixelHeight) {
int simpleSize =1;
if (srcWidth > srcHeight && srcWidth > pixelWidth) {
simpleSize = srcWidth / pixelWidth;
}else if (srcWidth < srcHeight && srcHeight > pixelHeight) {
simpleSize = srcHeight / pixelHeight;
}
if (simpleSize <=0) {
simpleSize =1;
}
return simpleSize;
}
Android缓存
1.概念:
客户端缓存就是将服务器请求到的数据(json,File)等保存到本地
2.缓存常见的使用场景和优势:
使用场景:
- 对Bitmap和File等大数据进行缓存,不用每次下载
- 应用离线模式
缓存优势:
- 不经常变化的数据,使用本地缓存,提升应用响应速度;
- 不用频繁的请求服务器,降低服务器的负载压力;
3.缓存策略
- android LruCache实现内存缓存(官方)
- android DiskLruCache实现硬盘缓存(square提供)
LruCache 近期最少使用缓存,内部采用LinkedHashMap,对增删改查做了一个封装,LruCache出现是为了取代SoftReference
网友评论