import android.content.res.Resources; |
import android.graphics.Bitmap; |
import android.graphics.BitmapFactory; |
public class LoadBitmapUtils { |
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); |
} |
/** |
* 计算需要缩放的比例 |
* |
* @param options |
* @param reqWidth |
* @param reqHeight |
* @return int 算最大insamplesize值是2的幂 |
*/ |
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; |
/*** |
* 缩放比例,默认值是1(不缩放) |
*/ |
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. |
// 计算最大insamplesize值是2的幂,同时保持高度和宽度大于所要求的高度和宽度。 |
while ((halfHeight / inSampleSize) > reqHeight |
&& (halfWidth / inSampleSize) > reqWidth) { |
inSampleSize *= 2 ; |
} |
} |
return inSampleSize; |
} |
} |
by: 发表于:2017-12-21 09:49:31 顶(0) | 踩(0) 回复
??
回复评论