Saving and Reading Bitmaps/Images from Internal memory in Android Saving and Reading Bitmaps/Images from Internal memory in Android android android

Saving and Reading Bitmaps/Images from Internal memory in Android


Use the below code to save the image to internal directory.

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

Explanation :

1.The Directory will be created with the given name. Javadocs is for to tell where exactly it will create the directory.

2.You will have to give the image name by which you want to save it.

To Read the file from internal memory. Use below code

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

Usage

  • To save:

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

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

Edit:

Added ImageSaver.setExternal(boolean) to support saving to external storage based on googles example.


Came across this question today and this is how I do it.Just call this function with the required parameters

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, fileOutputStream);        fileOutputStream.close();    } catch (Exception e) {        e.printStackTrace();    }}

Similarly, for reading the same, use this

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