Android编程之Bitmap图片压缩大小
2013-10-15 15:47
323 查看
文章来自:http://www.2cto.com/kf/201207/143385.html
Bitmap图片太大,会造成内存溢出。一般的都有图片预览机制,就是得到一张尺寸小一点的图片。
这里所谓的缩小尺寸可不是指在layout中设置一下宽高使图片缩小(其实质还是一张占内存大图),而是实实在在的将图片本身缩小,减小内存占用。
以下是方法,详细说明都在注释里了:
[java]
private Bitmap revitionImageSize(String path, int size) throws IOException {
// 取得图片
InputStream temp = this.getAssets().open(path);
BitmapFactory.Options options = new BitmapFactory.Options();
// 这个参数代表,不为bitmap分配内存空间,只记录一些该图片的信息(例如图片大小),说白了就是为了内存优化
options.inJustDecodeBounds = true;
// 通过创建图片的方式,取得options的内容(这里就是利用了java的地址传递来赋值)
BitmapFactory.decodeStream(temp, null, options);
// 关闭流
temp.close();
// 生成压缩的图片
int i = 0;
Bitmap bitmap = null;
while (true) {
// 这一步是根据要设置的大小,使宽和高都能满足
if ((options.outWidth >> i <= size)
&& (options.outHeight >> i <= size)) {
// 重新取得流,注意:这里一定要再次加载,不能二次使用之前的流!
temp = this.getAssets().open(path);
// 这个参数表示 新生成的图片为原始图片的几分之一。
options.inSampleSize = (int) Math.pow(2.0D, i);
// 这里之前设置为了true,所以要改为false,否则就创建不出图片
options.inJustDecodeBounds = false; www.2cto.com
bitmap = BitmapFactory.decodeStream(temp, null, options);
break;
}
i += 1;
}
return bitmap;
效果图:
![](http://www.2cto.com/uploadfile/2012/0725/20120725010938780.png)
作者:xyz_fly
Bitmap图片太大,会造成内存溢出。一般的都有图片预览机制,就是得到一张尺寸小一点的图片。
这里所谓的缩小尺寸可不是指在layout中设置一下宽高使图片缩小(其实质还是一张占内存大图),而是实实在在的将图片本身缩小,减小内存占用。
以下是方法,详细说明都在注释里了:
[java]
private Bitmap revitionImageSize(String path, int size) throws IOException {
// 取得图片
InputStream temp = this.getAssets().open(path);
BitmapFactory.Options options = new BitmapFactory.Options();
// 这个参数代表,不为bitmap分配内存空间,只记录一些该图片的信息(例如图片大小),说白了就是为了内存优化
options.inJustDecodeBounds = true;
// 通过创建图片的方式,取得options的内容(这里就是利用了java的地址传递来赋值)
BitmapFactory.decodeStream(temp, null, options);
// 关闭流
temp.close();
// 生成压缩的图片
int i = 0;
Bitmap bitmap = null;
while (true) {
// 这一步是根据要设置的大小,使宽和高都能满足
if ((options.outWidth >> i <= size)
&& (options.outHeight >> i <= size)) {
// 重新取得流,注意:这里一定要再次加载,不能二次使用之前的流!
temp = this.getAssets().open(path);
// 这个参数表示 新生成的图片为原始图片的几分之一。
options.inSampleSize = (int) Math.pow(2.0D, i);
// 这里之前设置为了true,所以要改为false,否则就创建不出图片
options.inJustDecodeBounds = false; www.2cto.com
bitmap = BitmapFactory.decodeStream(temp, null, options);
break;
}
i += 1;
}
return bitmap;
效果图:
![](http://www.2cto.com/uploadfile/2012/0725/20120725010938780.png)
作者:xyz_fly
相关文章推荐
- Android编程之Bitmap图片压缩大小
- Android编程之Bitmap图片压缩大小
- [Android算法] bitmap 将图片压缩到指定的大小
- [Android算法] bitmap 将图片压缩到指定的大小
- Android应用开发之图片(Bitmap)压缩(一)---------Bitmap与BitmapFactory的认识及图片的存储形式大小的实验
- 使用BitmapFactory压缩图片大小解决android解析图片OOM错误
- [Android算法] bitmap 将图片压缩到指定的大小
- Android-->原生保存Bitmap(图片),压缩图片,创建图片缩略图和视频缩略图(任意大小)
- [Android算法] bitmap 将图片压缩到指定的大小
- [Android算法] bitmap 将图片压缩到指定的大小
- Android中的图片按比例大小压缩代码
- android图片压缩质量参数Bitmap.Config RGB_565等的含义
- Android学习之压缩图片到指定大小
- bitmap的六种压缩方式,Android图片压缩
- Android图片工具类:获取Bitmap,压缩
- 正确的对待android的图片处理与压缩,你所熟悉而又陌生的bitmap
- 详解android 通过uri获取bitmap图片并压缩
- Android之图片压缩和Uri与String类型的路径转换,获取图片,文件大小的工具类
- Android图片大小调整动态实现方法(bitmap)
- android图片压缩质量参数Bitmap.Config RGB_565 ARGB_8888