Guardar y leer mapas de bits / Imágenes desde la memoria interna en Android

Lo que quiero hacer es guardar una imagen en la memoria interna del teléfono (no en la tarjeta SD) .

¿Cómo puedo hacerlo?

Obtuve la imagen directamente desde la cámara a la vista de imagen en mi aplicación, todo funciona bien.

Ahora lo que quiero es guardar esta imagen desde la Vista de imagen a la memoria interna de mi dispositivo Android y también acceder a ella cuando sea necesario.

¿Puede alguien por favor guiarme cómo hacer esto?

Soy un poco nuevo en Android, por favor, agradecería si pudiera tener un procedimiento detallado.

Use el siguiente código para guardar la imagen en el directorio interno.

 private String saveToInternalStorage(Bitmap bitmapImage){ ContextWrapper cw = new ContextWrapper(getApplicationContext()); // path to /data/data/yourapp/app_data/imageDir File directory = cw.getDir("imageDir", Context.MODE_PRIVATE); // Create imageDir File mypath=new File(directory,"profile.jpg"); FileOutputStream fos = null; try { fos = new FileOutputStream(mypath); // Use the compress method on the BitMap object to write image to the OutputStream bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos); } catch (Exception e) { e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } return directory.getAbsolutePath(); } 

Explicación

1. El Directorio se creará con el nombre de stack. Javadocs es para decir dónde exactamente creará el directorio.

2. Tendrá que dar el nombre de la imagen que desea guardar.

Para leer el archivo desde la memoria interna. Use el código a continuación

 private void loadImageFromStorage(String path) { try { File f=new File(path, "profile.jpg"); Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f)); ImageView img=(ImageView)findViewById(R.id.imgPicker); img.setImageBitmap(b); } catch (FileNotFoundException e) { e.printStackTrace(); } } 
 /** * Created by Ilya Gazman on 3/6/2016. */ public class ImageSaver { private String directoryName = "images"; private String fileName = "image.png"; private Context context; private boolean external; public ImageSaver(Context context) { this.context = context; } public ImageSaver setFileName(String fileName) { this.fileName = fileName; return this; } public ImageSaver setExternal(boolean external) { this.external = external; return this; } public ImageSaver setDirectoryName(String directoryName) { this.directoryName = directoryName; return this; } public void save(Bitmap bitmapImage) { FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(createFile()); bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream); } catch (Exception e) { e.printStackTrace(); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } @NonNull private File createFile() { File directory; if(external){ directory = getAlbumStorageDir(directoryName); } else { directory = context.getDir(directoryName, Context.MODE_PRIVATE); } if(!directory.exists() && !directory.mkdirs()){ Log.e("ImageSaver","Error creating directory " + directory); } return new File(directory, fileName); } private File getAlbumStorageDir(String albumName) { return new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), albumName); } public static boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); return Environment.MEDIA_MOUNTED.equals(state); } public static boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); return Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state); } public Bitmap load() { FileInputStream inputStream = null; try { inputStream = new FileInputStream(createFile()); return BitmapFactory.decodeStream(inputStream); } catch (Exception e) { e.printStackTrace(); } finally { try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } } 

Uso

  • Ahorrar:

     new ImageSaver(context). setFileName("myImage.png"). setDirectoryName("images"). save(bitmap); 
  • Cargar:

     Bitmap bitmap = new ImageSaver(context). setFileName("myImage.png"). setDirectoryName("images"). load(); 

Editar:

Se agregó ImageSaver.setExternal(boolean) para admitir el guardado en el almacenamiento externo basado en el ejemplo de Google .

Me encontré con esta pregunta hoy y así es como lo hago. Simplemente llame a esta función con los parámetros requeridos

 public void saveImage(Context context, Bitmap bitmap, String name, String extension){ name = name + "." + extension; FileOutputStream fileOutputStream; try { fileOutputStream = context.openFileOutput(name, Context.MODE_PRIVATE); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); fileOutputStream.close(); } catch (Exception e) { e.printStackTrace(); } } 

Del mismo modo, para leer lo mismo, use esto

 public Bitmap loadImageBitmap(Context context,String name,String extension){ name = name + "." + extension FileInputStream fileInputStream Bitmap bitmap = null; try{ fileInputStream = context.openFileInput(name); bitmap = BitmapFactory.decodeStream(fileInputStream); fileInputStream.close(); } catch(Exception e) { e.printStackTrace(); } return bitmap; } 
  public static String saveImage(String folderName, String imageName, RelativeLayout layoutCollage) { String selectedOutputPath = ""; if (isSDCARDMounted()) { File mediaStorageDir = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), folderName); // Create a storage directory if it does not exist if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d("PhotoEditorSDK", "Failed to create directory"); } } // Create a media file name selectedOutputPath = mediaStorageDir.getPath() + File.separator + imageName; Log.d("PhotoEditorSDK", "selected camera path " + selectedOutputPath); File file = new File(selectedOutputPath); try { FileOutputStream out = new FileOutputStream(file); if (layoutCollage != null) { layoutCollage.setDrawingCacheEnabled(true); layoutCollage.getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 80, out); } out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } return selectedOutputPath; } private static boolean isSDCARDMounted() { String status = Environment.getExternalStorageState(); return status.equals(Environment.MEDIA_MOUNTED); }