首页 > 代码库 > BitmapFactory.Options 处理OOM
BitmapFactory.Options 处理OOM
问题颇多,百度没出来个所以然
InputStream inputStream = MainActivity.this.getContentResolver().openInputStream(uri); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; options.inPreferredConfig = Bitmap.Config.ARGB_8888; BitmapFactory.decodeFile(uri.toString(), options); options.inJustDecodeBounds = false; int width = options.outWidth; int height = options.outHeight; float hh = 800f; float ww = 480f; int scale = 1; if (width > 600f) { scale = (int) (width / 600); } else if (height > 800f) { scale = (int) (height / 800); } if (scale <= 0) { scale = 1; } options.inSampleSize = scale; Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options);
首先,我拿不到outwidth这些数据,这也就是说不能设置scale。
其次,decodeFile不能写作decodeStream. 否则出错。
步骤似乎就是这样的。
第一步:BitmapFactory.Option
设置 inJustDecodeBounds为true
第二步:BitmapFactory.decodeFile(path,option)方法
解码图片路径为一个位图。如果指定的文件名是空的,或者不能解码到一个位图,函数将返回null[空值]。
获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度)
第三步:计算缩放比例,也可以不计算,直接给它设定一个值。
options.inSampleSize = "你的缩放倍数";
如果是2就是高度和宽度都是原始的一半。
第四步:设置options.inJustDecodeBounds = false;
重新读出图片
bitmap = BitmapFactory.decodeFile(path, options);
BitmapFactory.Options 处理OOM
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。