android高级之图片二次采样

今天咋们来学习图片的二次采样,那什么是图片的二次采样呢?为什么要采样呢?那么分两点来学习图片的二次采样:

一、为什么要二次采样

默认情况下,bitmap每个像素点占用4个字节(ARGB_8888),比如一张3543×3503的图片差不多在内存中占用47M
安卓系统给每个应用分配的内存都是有限的,可以使用Runtime.getRuntime().maxMemory()来获取

内存有限空间,默认情况下图片存储又需要大量的空间,于是就容易产生OOM(内存溢出)

二、二次采样的实现(这里我封装成了一个方法,使用时需要传入图片的资源id和宽和高的像素)

/**@param id 需要压缩的图片的资源id
  *@param maxw 需要压缩图片后宽的像素
  *@param maxh 需要压缩图片后高的像素
  */

private Bitmap getCompressBm(int id,int maxw,int maxh) {
    Bitmap bm = null;
    int iSamplesize = 1;

     //只采样边框
    BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
    bitmapFactoryOptions.inJustDecodeBounds = true;
    bm = BitmapFactory.decodeResource(getResources(), id, bitmapFactoryOptions);
    int iWidth = bitmapFactoryOptions.outWidth;
    int iHeight = bitmapFactoryOptions.outHeight;

     //对缩放比例进行调整,直到宽和高符合我们要求为止
    while (iWidth > w|| iHeight > h){
        iSamplesize = iSamplesize*2;
        iWidth = iWidth/iSamplesize;
        iHeight = iHeight/iSamplesize;
     }
    bitmapFactoryOptions.inSampleSize = iSamplesize;

   //把inJustDecodeBounds置为false
    bitmapFactoryOptions.inJustDecodeBounds = false;

    // 设置像素颜色信息
    bitmapFactoryOptions.inPreferredConfig = Bitmap.Config.RGB_565;

    bm = BitmapFactory.decodeResource(getResources(),id, bitmapFactoryOptions);


    return bm;//返回压缩后的照片
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值