Cómo cargar imágenes desde el Internal Storage de Android

Para que las imagenes puedan ser cargadas desde el internal storage, es importante que se hayan guardado de forma correcta.

*Crearlas usando un OutputStream sí las creará en el internal storage pero no permitirá que Android las encuentre

Crear la imagen

Lo primero que necesitamos es crear la imagen de forma correcta para Android. Asumiendo que tenemos la imagen (puede ser .jpg o .png) en un InputStream:

/*getFilesDir() nos devuelve el directorio privado de nuestra app en el internal storage. Es importante usarlo porque el path absoluto puede llegar a variar entre dispositivos. En este caso, estamos creando las subcarpetas data y product para almacenar nuestras imagenes*/
File rootfolder = new File(mActivity.getFilesDir(), "data/product/");
rootfolder.mkdirs();
Bitmap bmp = BitmapFactory.decodeStream(inputStream);
File imagePath = new File(rootfolder + "/","imagen1.jpg");
FileOutputStream fos = new FileOutputStream(imagePath);
 
/*Aún si nuestra imagen es jpg, usar el formato PNG de compresión. De lo contrario, Android no podrá encontrar la imagen cuando queramos cargarla*/
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);

Cargar la imagen

/*Cargar nuestra imagen*/
File file = new File(getActivity().getFilesDir().getAbsoluteFile(), "data/product/imagen1.jpg");
 
/*Opcional. En caso de que estemos cargando muchas imagenes, es importante cargarlas en un tamaño suficiente para que se vean bien pero que no consuman mucha memoria. En este caso, al usar inSampleSize = 4 lo que hará Android es cargar la imagen a 1/4 de su tamaño original*/
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
 
/*Si no hubieramos creado la imagen de la manera correcta, el método de decodeFile siempre nos regresaría nulo*/
Bitmap bmp = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
if (bmp == null) {
    imageView.setImageResource(R.drawable.shoe1); //poner imagen genérica
} else {
    imageView.setImageBitmap(bmp);
    bmp = null; //importante cerrar las referencias para que no se queden en memoria
}
file = null;//importante cerrar las referencias para que no se queden en memoria

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s