Android编程之Bitmap图片压缩大小
来源:互联网 发布:linux 程序运行权限 编辑:程序博客网 时间:2024/04/30 08:28
itmap图片太大,会造成内存溢出。一般的都有图片预览机制,就是得到一张尺寸小一点的图片。
这里所谓的缩小尺寸可不是指在layout中设置一下宽高使图片缩小(其实质还是一张占内存大图),而是实实在在的将图片本身缩小,减小内存占用。
以下是方法,详细说明都在注释里了:
- 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;
- bitmap = BitmapFactory.decodeStream(temp, null, options);
- break;
- }
- i += 1;
- }
- return bitmap;
效果图:
以下是工程文件:
Bitmap图片压缩大小
补充:关于流的重新加载问题,有人提出可以用reset来解决。这里确实可以用reset来解决,我已经试验过。
下面说一下关于reset的事情:
Java InputStream 的mark 和reset操作
mark用于标记当前位置;在读取一定数量的数据(小于readlimit的数据)后使用reset可以回到mark标记的位置。
FileInputStream不支持mark/reset操作;BufferedInputStream支持此操作;
mark(readlimit)的含义是在当前位置作一个标记,制定可以重新读取的最大字节数,
也就是说你如果标记后读取的字节数大于readlimit,你就再也回不到回来的位置了。
通常InputStream的read()返回-1后,说明到达文件尾,不能再读取。除非使用了mark/reset所以,你如果之前改成fileinputstream的话(例如从sd卡中读取的话),就不要用了,还是二次加载吧。
0 0
- Android编程之Bitmap图片压缩大小
- Android编程之Bitmap图片压缩大小
- Android编程之Bitmap图片压缩大小
- [Android算法] bitmap 将图片压缩到指定的大小
- [Android算法] bitmap 将图片压缩到指定的大小
- [Android算法] bitmap 将图片压缩到指定的大小
- [Android算法] bitmap 将图片压缩到指定的大小
- android bitmap压缩图片
- android 压缩图片bitmap
- android bitmap图片压缩
- Android应用开发之图片(Bitmap)压缩(一)---------Bitmap与BitmapFactory的认识及图片的存储形式大小的实验
- Bitmap图片压缩到指定字节大小
- bitmap图片压缩到制定字节大小
- Android-->原生保存Bitmap(图片),压缩图片,创建图片缩略图和视频缩略图(任意大小)
- Android中Bitmap图片压缩
- android 使用Bitmap压缩图片
- Android 图片压缩,Bitmap优化
- Android Bitmap 优化- 图片压缩
- 汇编中的通用数据传送类指令
- Jvm启动参数整理
- Android学习笔记(3)——按钮点击注册事件的四种写法
- JSON解析关联类型发生死循环 There is a cycle in the hierarchy!
- Node.js一些乱七八糟的知识
- Android编程之Bitmap图片压缩大小
- 【redis】dict
- C++ list
- 大数据处理系列之(一)Java线程池使用
- [OI回忆录系列之二]从中考到接触竞赛之前
- 2012ACM国际决赛试题 Fibonacci Words算法设计与分析
- Android Activity学习笔记——Activity的启动和创建
- 设计模式之单例模式
- Java笔记-内存管理(一)