Bitmap高效加载

来源:互联网 发布:php注册短信代码 编辑:程序博客网 时间:2024/06/11 05:21

Bitmap

Bitmap根据数据来源的不同,有以下几种加载方式:

1、BitmapFactory.decodeByteArray();字节数组

2、BitmapFactory.decodeFile();文件路径

3、BitmapFactory.decodeResource();资源ID

4、BitmapFactory.decodeStream();流

 

BitmapFactory.Options:

BitmapFactory.Options的几个重要属性:

1、 inJustDecodeBound

将这个属性设置为true时,返回的bitmap不是真正的bitmap的实际内容,而是只返回bitmap的宽高,并且将返回的宽高存放到outWidth和outHeight这两个字段当中

2、 inSampleSize:采样率

通过这个采样率可以极大地减少和降低图片的内存占有率

 

代码讲解:

public class BitmapUtil{    public static Bitmap ratio(String filePath,int piexlW,int piexlH){        BitmapFactory.Options newOptions = new BitmapFactory.Options(); //创建Options对象        newOptions.inJustDecodeBounds = true; //设置为true就保证了只加载图片的宽和高,而不加载图像真正的内容        newOptions.inPreferredConfig = Bitmap.Config.RGB_565;//设置位深度,如果图片不是特别大的话,而肉眼又察觉不出来的话可以设置低一点的位深度,                                                            // 默认是ARGB_8888,也就是每一位像素都要占8个字节,用RGB_565稍微小一些,消耗内存相对少一些        //预加载        BitmapFactory.decodeFile(filePath,newOptions);        //预加载以后就可以获取到图片的宽和高        int originalW = newOptions.outWidth;        int originalH = newOptions.outHeight;        //取出宽高后就可以进行采样        newOptions.inSampleSize = getSimpleSize(originalW,originalH,piexlW,piexlH);        //对Bitmap真正进行加载        newOptions.inJustDecodeBounds = false;        return BitmapFactory.decodeFile(filePath,newOptions); //返回的就是一个真正进过压缩裁剪的bitmap    }    private static int getSimpleSize(int originalW, int originalH, int piexlW, int piexlH) { //计算采样率        int simpleSize = 1;//默认采样率为1,也就是不压缩        if(originalW > originalH && originalW > piexlW){ //原始的宽度大于原始的高度,并且原始的宽度大于要显示的宽度,那么就以宽度来计算采样值            simpleSize = originalW / piexlW;        }else if(originalW < originalH && originalH > piexlH){ //原始的高度大于原始的宽度,并且原始的高度大于要显示的高度,那么就以高度来计算采样值            simpleSize = originalH / piexlH;        }        if(simpleSize <= 0){            simpleSize =1;        }        return simpleSize;    }}

原创粉丝点击