解决方案 »
- 100分 怎样禁止Activity重新onCreate
- service 通过 activity 中某个变量的引用进行操作的隐患
- 100分求一个简单的例子。。。。图像移动。。。。
- android2.3打开字符设备节点失败!!!
- 【紧急求助】一个程序不能设置俩闹钟广播么?
- Android应用之——百度地图最新SDK3.0应用,实现最常用的标注覆盖物以及弹出窗覆盖物
- fragment出错
- 使用ActivityCompat.requestPermissions一直报错,在另一个应用却没事
- 安卓切换界面的异常……
- 安卓开发蓝牙问题
- 有没有搞Android下wifi开发的一起交流下
- 求 大神帮忙ksoap调用WebService call方法报错。
我处理图片都是使用的ImageLoader 你可以看下这个博客 有介绍!对于大图片几M的图片 也没有发现问题
* 从uri 中读取图片并进行压缩处理
*
* @param uri
* @param scaleSize 目标大小
* @return
*/
public static Bitmap byteScaleToBitmap(Uri uri, int scaleSize) { Bitmap bm = null; BitmapFactory.Options options = new BitmapFactory.Options();
// 这个参数定义返回 bm为null 仅仅计算图片宽高 而不实际生成图片
options.inJustDecodeBounds = true;
InputStream is;
try {
is = mContext.getContentResolver().openInputStream(uri);
bm = BitmapFactory.decodeStream(is, null, options);
int width = options.outWidth;
int height = options.outHeight;
// 压缩比例
int be = 1;
if (width > scaleSize || height > scaleSize) { if (width > height) {
be = width / scaleSize + 1;
} else {
be = height / scaleSize + 1;
}
}
// 设置为false 实际生产图片
options.inJustDecodeBounds = false;
if (be > 1) {// 如果大于1 就设置压缩参数
// 执行压缩
options.inSampleSize = be; // sampleSize 可接受任意值 当时小于或者等于这个值的2次方数才会生效
}
is.close();
is = mContext.getContentResolver().openInputStream(uri); //实际读取图片
bm = BitmapFactory.decodeStream(is, null, options);
is.close(); } catch (FileNotFoundException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace();
}
return bm; }提示
1 以上代码 处理从文件中读取大图片的做法, 首先获取图片大小, 设置合理的压缩比率 然后才实际读取图片内容
这样不至于一下子将一个2048×2048 之类的图片读取进内存而导致oom。
仅适用查看全图
2 对于通过滑动查看超大图片图片情况 ,
个人思路 对大图片进行按屏幕大小等分切割,然后存在sd卡上,然后根据点击位置读取相邻的4个图片(最多4个),然后进行渲染。