54 lines
2.1 KiB
Plaintext
54 lines
2.1 KiB
Plaintext
package com.novelbook.android.utils;
|
||
|
||
import android.content.res.Resources;
|
||
import android.graphics.Bitmap;
|
||
import android.graphics.BitmapFactory;
|
||
|
||
|
||
public class BitmapUtil {
|
||
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
|
||
int reqWidth, int reqHeight) {
|
||
|
||
// First decode with inJustDecodeBounds=true to check dimensions
|
||
final BitmapFactory.Options options = new BitmapFactory.Options();
|
||
options.inJustDecodeBounds = true;
|
||
BitmapFactory.decodeResource(res, resId, options);
|
||
|
||
// Calculate inSampleSize
|
||
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
|
||
|
||
// Decode bitmap with inSampleSize set
|
||
options.inJustDecodeBounds = false;
|
||
return BitmapFactory.decodeResource(res, resId, options);
|
||
}
|
||
|
||
public static int calculateInSampleSize(
|
||
BitmapFactory.Options options, int reqWidth, int reqHeight) {
|
||
// Raw height and width of image
|
||
final int height = options.outHeight;
|
||
final int width = options.outWidth;
|
||
int inSampleSize = 1;
|
||
|
||
if (height > reqHeight || width > reqWidth) {
|
||
|
||
/** final int halfHeight = height / 2;
|
||
final int halfWidth = width / 2;
|
||
|
||
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
|
||
// height and width larger than the requested height and width.
|
||
while ((halfHeight / inSampleSize) > reqHeight
|
||
&& (halfWidth / inSampleSize) > reqWidth) {
|
||
inSampleSize *= 2;
|
||
} */
|
||
final int heightRatio = Math.round((float) height / (float) reqHeight);
|
||
final int widthRatio = Math.round((float) width / (float) reqWidth);
|
||
// 选择宽和高中最小的比率作为inSampleSize的值,这样可以保证最终图片的宽和高
|
||
// 一定都不会大于等于目标的宽和高。
|
||
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
|
||
|
||
}
|
||
|
||
return inSampleSize;
|
||
}
|
||
}
|