studio manejo guardar archivos android image

manejo - guardar bitmap android



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

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.


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; }


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 pila. 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(); } }


convertirá la imagen a bytes ... y luego podrá almacenarla en la base de datos, y cuando no use esta imagen, la volverá a convertir de byte ,,, encontrará información sobre cómo convertir la imagen a bytes ... .


/** * 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 .