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;
 | ||
|     }
 | ||
| }
 |