在我注意到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
方法相比,我应该继续使用这个方法,还是切换到使用内置方法?有什么区别?
答案 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()方法将大位图转换为小位图:
如果我需要将文件中的位图加载到不同大小的ImageView,我会使用你的方法。