本帖最后由 u013064347 于 2014-01-13 10:22:47 编辑

解决方案 »

  1.   


    // 取得图片   
            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;  
      

  2.   

    因为质量压缩并不是能一味的压缩下去,压缩到一定程度就不会再压缩了,它只是通过改变色深等改变图片大小,不会改变其占用的内存http://blog.csdn.net/ls703/article/details/40394719