package org.appsroid.fxpro.bitmap;

import org.appsroid.fxpro.library.MemoryManagement;
import org.appsroid.fxpro.library.UriToUrl;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;

public class BitmapLoader {

	public Bitmap load(Context context, int[] holderDimention, String image_url) throws Exception {
		BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
		bitmapOptions.inJustDecodeBounds = true;
		BitmapFactory.decodeFile(image_url, bitmapOptions);

		int inSampleSize = 1;

		final int outWidth = bitmapOptions.outWidth;
		final int outHeight = bitmapOptions.outHeight;

		final int holderWidth = holderDimention[0];
		final int holderHeight = holderDimention[1];

		// Calculation inSampleSize
		if (outHeight > holderHeight || outWidth > holderWidth) {
			final int halfWidth = outWidth / 2;
			final int halfHeight = outHeight / 2;

			while ((halfHeight / inSampleSize) > holderHeight && (halfWidth / inSampleSize) > holderWidth) {
				inSampleSize *= 2;
			}
		}

		bitmapOptions.inSampleSize = inSampleSize;

		// Decoding bitmap
		bitmapOptions.inJustDecodeBounds = false;
		return BitmapProcessing.modifyOrientation(BitmapFactory.decodeFile(image_url, bitmapOptions), image_url);
	}
	
	public Bitmap load(Context context, int[] holderDimention, Uri image_uri) throws Exception {
		String image_url = UriToUrl.get(context, image_uri);
		if (image_url != null) {
			return load(context, holderDimention, image_url);
		}
		return null;
	}
	
	public Bitmap load(Context context, String image_url) throws Exception {
		BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
		
		bitmapOptions.inJustDecodeBounds = true;
		BitmapFactory.decodeFile(image_url, bitmapOptions);
		
		final float imageSize = (float) bitmapOptions.outWidth * (float) bitmapOptions.outHeight * 4.0f / 1024.0f / 1024.0f; // MB
		
		bitmapOptions.inSampleSize = (int) Math.pow(2, Math.floor(imageSize / MemoryManagement.free(context)));
		bitmapOptions.inJustDecodeBounds = false;
		
		return BitmapProcessing.modifyOrientation(BitmapFactory.decodeFile(image_url, bitmapOptions), image_url);
	}

}

package org.appsroid.fxpro.bitmap;

import org.appsroid.fxpro.library.MemoryManagement;
import org.appsroid.fxpro.library.UriToUrl;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;

public class BitmapLoader {

	public Bitmap load(Context context, int[] holderDimension, String image_url) throws Exception {
		BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
		bitmapOptions.inJustDecodeBounds = true;
		BitmapFactory.decodeFile(image_url, bitmapOptions);

		int inSampleSize = 1;

		final int outWidth = bitmapOptions.outWidth;
		final int outHeight = bitmapOptions.outHeight;

		final int holderWidth = holderDimension[0];
		final int holderHeight = holderDimension[1];

		// Calculation inSampleSize
		if (outHeight > holderHeight || outWidth > holderWidth) {
			final int halfWidth = outWidth / 2;
			final int halfHeight = outHeight / 2;

			while ((halfHeight / inSampleSize) > holderHeight && (halfWidth / inSampleSize) > holderWidth) {
				inSampleSize *= 2;
			}
		}

		bitmapOptions.inSampleSize = inSampleSize;

		// Decoding bitmap
		bitmapOptions.inJustDecodeBounds = false;
		return BitmapProcessing.modifyOrientation(BitmapFactory.decodeFile(image_url, bitmapOptions), image_url);
	}
	
	public Bitmap load(Context context, int[] holderDimension, Uri image_uri) throws Exception {
		String image_url = UriToUrl.get(context, image_uri);
		if (image_url != null) {
			return load(context, holderDimension, image_url);
		}
		return null;
	}
	
	public Bitmap load(Context context, String image_url) throws Exception {
		BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
		
		bitmapOptions.inJustDecodeBounds = true;
		BitmapFactory.decodeFile(image_url, bitmapOptions);
		
		final float imageSize = (float) bitmapOptions.outWidth * (float) bitmapOptions.outHeight * 4.0f / 1024.0f / 1024.0f; // MB
		
		bitmapOptions.inSampleSize = (int) Math.pow(2, Math.floor(imageSize / MemoryManagement.free(context)));
		bitmapOptions.inJustDecodeBounds = false;
		
		return BitmapProcessing.modifyOrientation(BitmapFactory.decodeFile(image_url, bitmapOptions), image_url);
	}

}

Update BitmapLoader.java