关于图片处理的Bug,有些难度,请大神们指点:) 图片 bitmap 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 图片的大小都超出vm heapsize了啊,能不OOM嘛 http://blog.csdn.net/wwj_748/article/details/10079311我处理图片都是使用的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个),然后进行渲染。 新人求帮助 怎么同时操控多个控件 加急。。。。android使用Intent打开联系人的修改页面出错 MediaPlayer流媒体播放问题 GDB如何在ANDROID的中使用 关于音乐播放的一个问题 请问这种布局怎么实现的? 发布程序前要做啥工作? 关于在linux下编译android项目遇到的一个问题 android sina 微博分享 认证错误 有没有搞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个),然后进行渲染。