Search code examples
androidbmp

Android save bmp image


I'm trying to save a captured .bmp file to sdcard. Here is a fragment of code which is responsible for this:

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

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

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

        fos.flush();
        fos.close();
        Log.d("asd", "yeah!");
    //  MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
    }catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

But there is an error:

images are invalid and its size are 0kb

What am I doing wrong?


Solution

  • Try this

    private boolean SaveToSD() {
    
            String imageName = null;
    
            Bitmap sourceBitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();
    
            boolean imageSaved = false;
    
            if (sourceBitmap != null && !sourceBitmap.isRecycled()) {
                File storagePath = new File(
                        Environment.getExternalStorageDirectory() + "/iGridu/");
    
                if (!storagePath.exists()) {
                    storagePath.mkdirs();
                }
    
                int count = storagePath.list().length;
    
                Log.i("SaveToSD count", "" + count);
    
                imageName = String.valueOf(count + 1) + "_igridu";
    
                FileOutputStream out = null;
                File imageFile = new File(storagePath, String.format("%s.jpg",
                        imageName));
                try {
                    out = new FileOutputStream(imageFile);
                    imageSaved = sourceBitmap.compress(Bitmap.CompressFormat.JPEG,
                            90, out);
                    out.flush();
                    out.close();
                } catch (Exception e) {
                    Log.e("SaveToSD ", "Unable to write the image to gallery" + e);
    
                }
    
                ContentValues values = new ContentValues(3);
                values.put(Images.Media.TITLE, imageName);
                values.put(Images.Media.MIME_TYPE, "image/jpeg");
                values.put("_data", imageFile.getAbsolutePath());
    
                getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
            }
    
            return imageSaved;
        }