Android低端设备加载大图片、优化设备加载图片

此文 可以处理低端设备加载图片,还可以优化图片的加载 从而提高app的工作效率 最终提高用户的舒适度

加载bitmap  当设备的堆栈内存较小而且bitmap.jpg较大的时候,用下面的代码内存溢出。

Bitmap bp=BitmapFactory.decodeFile("sdcard/bitmap.jpg");

      ImageView imageView=(ImageView) findViewById(R.id.imageView1);

      imageView.setImageBitmap(bp);

 

 

测试时的信息:设备内存是16M  图片1.73M。

此时LogCat信息:

我们会发现是内存溢出了,可下面的代码似乎没有任何问题,其实的确没有任何问题。

Bitmap bp=BitmapFactory.decodeFile("sdcard/bitmap.jpg");

      ImageView imageView=(ImageView)

 

 

最主要的提示信息其实在(LogCat)上面,内容如下:

内存溢出的原因是:

30720012 byte=29 M 

也就是说图片加载申请了29M的内存远大于设备的16M内存

解析:

29M是计算机把所有的像素信息(像素个数*像素占用空间大小*4+其他信息)解析出来的保存至内存的大小(4是因为Android是按照ARGB保存)

 

解决办法:

按照屏幕宽高来缩放

// 点击按钮开始加载

    publicvoid load(View view) {

 

       // Options 这个类里Google封装了解析图片的所有参数

       Options opt = new Options();

 

       // 设置为只读取照片宽高等其他信息,不读取内容

       opt.inJustDecodeBounds = true;

 

       BitmapFactory.decodeFile("sdcard/bitmap2.jpg", opt);

       // 取得照片宽高

       intimgH = opt.outHeight;

       intimgW = opt.outWidth;

       // 获取屏幕宽高

       Display display = getWindowManager().getDefaultDisplay();

       // 由于本Demo是为了解决低端机加载图片内存溢出,所以还用老方法,不用最新的方法取宽高

       intscreenW = display.getWidth();

       intscreenH = display.getHeight();

       // 设置默认缩放比例为1

       intscale = 1;

       // 取得宽高缩放比例

       intscaleW = imgW / screenW;

       intscaleH = imgH / screenH;

 

       // 让缩放比例为宽高中比例较大的

       if (scaleW >= scaleH && scaleW > 1) {

           scale = scaleW;

       } elseif (scaleW <= scaleH && scaleH > 1) {

           scale = scaleH;

       }

       // 设置为读取照片全部信息

       opt.inJustDecodeBounds = false;

       // 按照比例缩放

       opt.inSampleSize = scale;

       Bitmap bp = BitmapFactory.decodeFile("sdcard/bitmap2.jpg", opt);

       ImageView imageView = (ImageView) findViewById(R.id.imageView1);

       imageView.setImageBitmap(bp);

    }

 

 

图片大小的原理:

发布了22 篇原创文章 · 获赞 10 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章