在android中要加载一张大图片到内存中如果通过如下方式进行:

Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg");iv.setImageBitmap(bitmap);

则会抛出内存溢出异常Caused by: java.lang.OutOfMemoryError

正确的做法应该是这样的:

public class MainActivity extends Activity {    private ImageView iv;    private int windowHeight;    private int windowWidth;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        iv = (ImageView) findViewById(R.id.iv);        WindowManager win = (WindowManager) getSystemService(WINDOW_SERVICE);        windowHeight = win.getDefaultDisplay().getHeight();        windowWidth = win.getDefaultDisplay().getWidth();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    public void load(View view) {            /*     Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg");         iv.setImageBitmap(bitmap);*/                 // 图片解析的配置        BitmapFactory.Options options = new Options();        // 不去真的解析图片,只是获取图片的头部信息宽,高        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile("/sdcard/a.jpg", options);        int imageHeight = options.outHeight;        int imageWidth = options.outWidth;        // 计算缩放比例        int scaleX = imageWidth / windowWidth;        int scaleY = imageHeight / windowHeight;        int scale = 1;        if (scaleX > scaleY & scaleY >= 1) {            scale = scaleX;        }else if (scaleY > scaleX & scaleX >= 1) {            scale = scaleY;        }        //真的解析图片        options.inJustDecodeBounds=false;        //设置采样率        options.inSampleSize=scale;        Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/a.jpg", options);        iv.setImageBitmap(bitmap);    }}

在这种情况下,是将大分辨率的图片按照一定的比例缩小然后加载进内存,就不会出现内存溢出的现象了。

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3744876.html

参考:http://blog.csdn.net/zhong1113/article/details/23824933

更多相关文章

  1. Android上传图片(PHP服务器)
  2. Android中使用Handler引发的内存泄露
  3. android 显示网络图片
  4. android Selector的用法
  5. Android(安卓)WebView 支持H5图片上传
  6. 浅入浅出Android(015):使用ImageView显示网络图片
  7. android沉浸式状态栏底部背景用图片代替
  8. android selector下的设置背景属性值
  9. 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法

随机推荐

  1. Android 向系统添加一个联系人信息contac
  2. Android在代码中设置控件的drawableLeft,d
  3. android当前正在运行的应用包名
  4. Android中共享全局变量
  5. android 几个工具方法
  6. 转:android 各种 Adapter
  7. android调用手机铃声
  8. ERROR: Could not find com.android.tool
  9. Android开发20——单个监听器监听多个按
  10. 带有CheckBox的ListView,实现删除和选中功