BitmapFactory --- 手动加载大图片Demo

 

【1】问题加在过大的图片,内存分配给的不够就会报错

10-16 02:11:10.443: I/dalvikvm-heap(22693): Forcing collection of SoftReferences for 30720012-byte allocation

加载大图的时候内存溢出。

【2】获取手机的分辨率。

A,过时的API

[2]获取手机的分辨率      

   WindowManager wm  = (WindowManager) getSystemService(WINDOW_SERVICE);

      int width = wm.getDefaultDisplay().getWidth();

      int height = wm.getDefaultDisplay().getHeight();

    

B,新的API(没有下划线)

Point point = new Point();

     wm.getDefaultDisplay().getSize(point);

     int width = point.x;

     int height = point.y;

     System.out.println("手机的分辨率:"+width+"~~~~"+height);

 

【3】 把图片放在SD卡中。

          注意opts.inJustDecodeBounds = true;方法,设为true时不是真的解析位图。

            图片大小 2400 * 3200      宽高都除以100     240 和320

            手机大小:320 * 480

            计算缩放比:7  6   按照大的去缩放.

    所以需要我们动态的获取手机的分辨率和图片的分辨率 在算出缩放比

// 点击按钮加载大图片(小狗图片)

    @SuppressLint("SdCardPath")

    public void click(View v) {

        //[0]创建位图工厂配置参数

        BitmapFactory.Options opts = new Options();

        //[0.1]不去真正的解析位图 返回一个null(no bitmap) 但是还可以获取图片的宽高信息

        opts.inJustDecodeBounds = true;

        // [1]把小狗的图片变成bitmap

        BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg",opts);

        //[2]获取图片的宽高信息

        int imgWidth = opts.outWidth;

        int imgHeight = opts.outHeight;

        System.out.println("图片的宽高:"+imgWidth+"~~~"+imgHeight);

        //[3]算出缩放比  图片的高/手机高   图片的宽/手机的宽   按照大的去缩放

        int scale = 1;  //代表缩放比

        int scaleX = imgWidth / width;

        int scaleY = imgHeight / height;

        if (scaleX >= scaleY && scaleX > scale) {

            scale = scaleX;

        }else if(scaleY > scaleX && scaleY > scale){

            scale = scaleY;

        }

        System.out.println("缩放比:"+scale);

        //[4]按照缩放比加载图片

        opts.inSampleSize = scale;

        //[5]按照这个缩放比解析位图        

        opts.inJustDecodeBounds = false;

        Bitmap bitmap = BitmapFactory.decodeFile("/mnt/sdcard/dog.jpg",opts);

        // [6]把bitmap(位图)展示到iv上

        iv.setImageBitmap(bitmap);



    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值