package com.echo5bravo.govre.UTILS; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; public class ImageLoader { public static Bitmap loadFromUri( Context context, String uri, int maxW, int maxH ) throws IOException { final BitmapFactory.Options options = new BitmapFactory.Options(); Bitmap bitmap = null; options.inScaled = false; options.inPreferredConfig = Bitmap.Config.RGB_565; BufferedInputStream stream = null; if ( uri.startsWith( ContentResolver.SCHEME_CONTENT ) || uri.startsWith( ContentResolver.SCHEME_FILE ) ) stream = new BufferedInputStream( context.getContentResolver().openInputStream( Uri.parse( uri ) ), 16384 ); if ( stream != null ) { options.inSampleSize = computeSampleSize( stream, maxW, maxH ); stream = null; stream = new BufferedInputStream( context.getContentResolver().openInputStream( Uri.parse( uri ) ), 16384 ); } else { return null; } options.inDither = false; options.inJustDecodeBounds = false; options.inPurgeable = true; bitmap = BitmapFactory.decodeStream( stream, null, options ); if ( bitmap != null ) bitmap = BitmapUtils.resizeBitmap( bitmap, maxW, maxH ); return bitmap; } private static int computeSampleSize( InputStream stream, int maxW, int maxH ) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream( stream, null, options ); double w = options.outWidth; double h = options.outHeight; int sampleSize = (int)Math.ceil( Math.max( w / maxW, h / maxH ) ); return sampleSize; } }