Save Bitmap to SD Card

jpmastermind picture jpmastermind · Nov 1, 2012 · Viewed 14.3k times · Source

I have a Bitmap image which I have to store in a folder in the SD Card, my code is shown below. It creates the folder and file as expected, but the image is not stored into the file, it remains an empty file... Can anyone tell me what's wrong?

Bitmap merged = Bitmap.createBitmap(mDragLayer.getChildAt(0).getWidth(), mDragLayer.getChildAt(0).getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(merged);

// save to folder in sd card
try {
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "folder");
    if(!imagesFolder.exists())
        imagesFolder.mkdirs();
    int imageNum;
    if(imagesFolder.list()==null)
        imageNum = 1;
    else
        imageNum = imagesFolder.list().length + 1;

    String fileName = "file_" + String.valueOf(imageNum) + ".jpg";
    File output = new File(imagesFolder, fileName);
    while(output.exists()){
        imageNum++;
        fileName = "file_" + String.valueOf(imageNum) + ".jpg";
        output = new File(imagesFolder, fileName);
    }

    OutputStream fOut = new FileOutputStream(output);
    merged.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    fOut.flush();
    fOut.close();

    Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();

   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
}

Answer

Dhruvil Patel picture Dhruvil Patel · Nov 1, 2012

First add permission to AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

Then write down in Java File as below.

    String extr = Environment.getExternalStorageDirectory().toString();
            File mFolder = new File(extr + "/MyApp");

            if (!mFolder.exists()) {
                mFolder.mkdir();
            }

            String strF = mFolder.getAbsolutePath();
            File mSubFolder = new File(strF + "/MyApp-SubFolder");

            if (!mSubFolder.exists()) {
                mSubFolder.mkdir();
            }

            String s = "myfile.png";

            f = new File(mSubFolder.getAbsolutePath(),s);

UPDATED

           String strMyImagePath = f.getAbsolutePath();
             FileOutputStream fos = null;
             try {
                 fos = new FileOutputStream(f);
                 bitmap.compress(Bitmap.CompressFormat.PNG,70, fos);

                 fos.flush();
                 fos.close();
              //   MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
             }catch (FileNotFoundException e) {

                 e.printStackTrace();
             } catch (Exception e) {

                 e.printStackTrace();
             }