Android压缩位图

时间:2013-12-15 03:27:36

标签: android image bitmap

在我注意到Bitmap类中有一个compress方法之前,我已经编写了这个方法。

/**
 * Calcuate how much to compress the image
 * @param options
 * @param reqWidth
 * @param reqHeight
 * @return
 */
public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {

    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1; // default to not zoom image

    if (height > reqHeight || width > reqWidth) {
             final int heightRatio = Math.round((float) height/ (float) reqHeight);
             final int widthRatio = Math.round((float) width / (float) reqWidth);
             inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
    }
        return inSampleSize;
}

/**
 * resize image to 480x800
 * @param filePath
 * @return
 */
public static Bitmap getSmallBitmap(String filePath) {

    File file = new File(filePath);
    long originalSize = file.length();

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, options);

    // Calculate inSampleSize based on a preset ratio
    options.inSampleSize = calculateInSampleSize(options, 480, 800);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;

    Bitmap compressedImage = BitmapFactory.decodeFile(filePath, options);


    return compressedImage;
}

我想知道,与内置的Compress方法相比,我应该继续使用这个方法,还是切换到使用内置方法?有什么区别?

2 个答案:

答案 0 :(得分:2)

Basically

您在上面的代码中所做的只是调整图像大小,因为您使用SampleSize后图像质量不会下降。

compress(Bitmap.CompressFormat format, int quality, OutputStream stream)

当您想要更改imageFormat Bitmap.CompressFormat JPEG时,可以使用它 Bitmap.CompressFormat PNG Bitmap.CompressFormat WEBP或使用quality参数quality缩小图片的0 - 100

答案 1 :(得分:2)

您的方法符合Loading Large Bitmap指南

  • 磁盘上的大文件
  • 内存中的小位图

compress()方法将大位图转换为小位图:

  • 内存中的大位图
  • 磁盘上的小位图(IOStream)(可能采用不同的格式)

如果我需要将文件中的位图加载到不同大小的ImageView,我会使用你的方法。