您的位置:首页 > 移动开发 > Android开发

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; 

效果图:



作者:xyz_fly
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android