位图的简单处理

当我们加载一张大的图片的时候,很容易产生oom,这个时候对于大的位图要进行简单的预处理,进行一定程度的压缩,再进行使用,能让图片占用的内存变少,我们写一个简单的例子:


我们在xml中放入一个按钮,一个imageview,drawable文件中加入一张大位图。

<pre name="code" class="java">public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn;
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.btn1);
        imageView = (ImageView) findViewById(R.id.iv);
        btn.setOnClickListener(this);

    }

    //这个函数拿来获得一个压缩过的位图,传入四个参数一个是资源,一个是资源的ID,一个是需要压缩成多宽,多高。
    public Bitmap  decodeResource(Resources res,int res_id,int reqWidth,int reqHeight)
    {
        BitmapFactory.Options options = new BitmapFactory.Options();
       //设置为true是不加载具体图像只获得图片的宽高
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res,res_id,options);
        //调用计算压缩比的函数
        options.inSampleSize = caculater(options,reqWidth,reqHeight);
        //设置为false加载整个图片
        options.inJustDecodeBounds = false;
        //返回按压缩比压缩后的bitmap图像
        return BitmapFactory.decodeResource(res,res_id,options);
    }
     //计算压缩比的函数
    private static int caculater(BitmapFactory.Options options,int reqWidth, int reqHeight) {
        //得到原图片的属性
        int height = options.outHeight;
        int width = options.outWidth;
        //设置初始压缩比为1,也就是不压缩。
        int sampleSize = options.inSampleSize = 1;
        //如果需要的图片比原本的图片小,计算压缩比,按长和宽中较小值压缩,可以保证图片不失真。
        if(height>reqHeight || width>reqWidth)
        {
            if(height>width)
            {
                 sampleSize =  Math.round((float)width/(float)reqWidth);
            }
            else {
                 sampleSize =  Math.round((float)height/(float)reqWidth);
            }
        }
        return sampleSize;
    }

    @Override
    public void onClick(View view) {
           Bitmap bitmap = decodeResource(getResources(),R.mipmap.spring,50,50);
           imageView.setImageBitmap(bitmap);
    }
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值