android图片二次采样

由于移动设备的屏幕尺寸有限,即使将高分辨率图片的分辨率降低,也不会影响显示效果。那如何降低呢?就需要用到一个类,那就是BitmapFactory.options类,主要会用到这个类的inSampleSize、inJustDecodeBounds、outHeight、outWidth参数。
inSampleSize:缩放比例,这个参数需要是2的幂函数。
inJustDecodeBounds:如果设置这个参数为ture,就不会给图片分配内存空间,但是可以获取到图片的大小等属性。
outHeight:图片高,单位像素.
outWidth:图片宽,单位像素.

说完这个类后,我们说说步骤,首先我们可以通过设置一个Options的属性inJustDecodeBounds=true,然后使用BitmapFactory.decodeXXX方法,让options作为参数,这样,我们在不分配内存的情况下,可以通过options读取图片的大小,outWidth和outHeight。其次通过原始图片的大小和你需要图片的大小来计算出需要缩放的比例。最后通过缩放比例值作为options.inSampleSize的值,再次调用BitmapFactory.decodeXXX,在调用方法前一定要设置inJustDecodeBounds=false


public class MainActivity extends AppCompatActivity {

    private final int MAXPICWITH = 1000;
    private final int MAXPICHEIGHT = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        //ImageView imageView = (ImageView) findViewById(R.id.ivPic);
        ImageView imageViewSimple = (ImageView) findViewById(R.id.ivPic);
        //imageView.setImageResource(R.drawable.abc);

        //TODO 获取bitmap
        Bitmap bm = getBitMapFromRes();


        //TODO 给imageview设置图片
        imageViewSimple.setImageBitmap(bm);
    }

    /**
     * 获取图片,并进行压缩
     * @return
     */
    private Bitmap getBitMapFromRes() {
        int sampleSize = 1;

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(getResources(),R.drawable.bigpic,options);
        int iWith = options.outWidth;
        int iHeight = options.outHeight;

        while ((iWith/sampleSize > MAXPICWITH) || (iHeight/sampleSize > MAXPICHEIGHT)){
            sampleSize = sampleSize*2;
        }

        options.inJustDecodeBounds = false;
        options.inSampleSize = sampleSize;
        Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.bigpic,options);

        return bm;


    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值