Java tutorial
//package com.java2s; //License from project: Open Source License import java.io.ByteArrayOutputStream; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; public class Main { public static Bitmap decodeInSampleSize(String imagePath, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(imagePath, options); // Calculate inSampleSize options.inSampleSize = calculateSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(imagePath, options); } public static Bitmap decodeInSampleSize(Resources res, int resId, int reqWidth, int reqHeight) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(res, resId, options); options.inSampleSize = calculateSize(options, reqWidth, reqHeight); options.inJustDecodeBounds = false; return BitmapFactory.decodeResource(res, resId, options); } public static Bitmap decodeInSampleSize(byte[] encodeByte, int reqWidth, int reqHeight) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length, options); options.inSampleSize = calculateSize(options, reqWidth, reqHeight); options.inJustDecodeBounds = false; return BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length, options); } public static Bitmap decodeInSampleSize(Bitmap bitmap, int reqWidth, int reqHeight) { if (bitmap.getWidth() >= reqWidth * 2 && bitmap.getHeight() >= reqHeight * 2) { ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayBitmapStream); byte[] byteArray = byteArrayBitmapStream.toByteArray(); bitmap = decodeInSampleSize(byteArray, reqWidth, reqHeight); } return bitmap; } private static int calculateSize(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; } } return inSampleSize; } }