Bitmap高效加载

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值