Android简易实战教程--第二十八话《加载大图片》
16lz
2021-01-26
Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出。假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃。这种异常是无法捕获的
内存不足并不是说图片的大小决定的,最主要的因素是像素问题。
因此加载大图片就要设置相应的缩放比例。
*计算机把图片所有像素信息全部解析出来,保存至内存
*Android保存图片像素信息,是用ARGB保存
*手机屏幕320*480,总像素:153600
*图片宽高2400*3200,总像素7680000
*算法:得到缩放比率
*2400 / 320 = 7
*3200 / 480 = 6
代码:
package com.itny.loadimage;import android.os.Bundle;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.BitmapFactory.Options;import android.graphics.Point;import android.view.Display;import android.view.Menu;import android.view.View;import android.widget.ImageView;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ //解析图片时需要使用到的参数都封装在这个对象里了 Options opt = new Options(); //不为像素申请内存,只获取图片宽高 opt.inJustDecodeBounds = true; BitmapFactory.decodeFile("sdcard/dog.jpg", opt); //拿到图片宽高 int imageWidth = opt.outWidth; int imageHeight = opt.outHeight; Display dp = getWindowManager().getDefaultDisplay(); //拿到屏幕宽高int screenWidth = dp.getWidth(); int screenHeight = dp.getHeight(); //计算缩放比例 int scale = 1;//表示默认不缩放 int scaleWidth = imageWidth / screenWidth; int scaleHeight = imageHeight / screenHeight; //哪个缩放比例大要哪个 >=防止缩放比例是一样的程序不执行这里 if(scaleWidth >= scaleHeight && scaleWidth >= 1){//scaleWidth >= 1 只缩放比屏幕像素大的图片 scale = scaleWidth; } else if(scaleWidth < scaleHeight && scaleHeight >= 1){ scale = scaleHeight; } //设置缩放比例 opt.inSampleSize = scale; //这个时候有了缩放比了。因此要再一次为图片申请内存,使用BitmapFactory去解析位图 opt.inJustDecodeBounds = false; //此时的Bitmap就是缩放后的Bitmap。 Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt); ImageView iv = (ImageView) findViewById(R.id.iv); iv.setImageBitmap(bm);//Sets a Bitmap as the content of this ImageView. } }这样就能加载一张较大的图片了,运行如下:
更多相关文章
- android 将res内图片文件通过Bitmap对象存到手机本地中
- android 中.9图片的用法 详解
- android中使用ViewPager实现图片左右拖动
- Android中Bitmap内存占用分析
- Android(安卓)>> 27. Android(安卓)Studio 9-Patch 图片制作以及
- Android拍照或从系统相册获取图片
- Android(安卓)窗帘(Curtain)效果二之波浪式动态扭曲效果
- Android中的网络应用之网页设置,检测、配置用户设备属性。
- Android性能优化之三级缓存