Save bitmap to SD card

I have a bitmap that I have to store in a folder on the SD card, my code is shown below. It creates a folder and a file as expected, but the image is not saved in the file, it remains an empty file ... Can someone tell me what is 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(); } } 
+4
source share
3 answers

First add permission to AndroidManifest.xml

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

Then write in the Java file as shown 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(); } 
+17
source

you just need a bitmap

and you need to go the way to save the image

 Bitmap b = pagesView.getDrawingCache(); b.compress(CompressFormat.JPEG, 100, new FileOutputStream(Environment.getExternalStorageDirectory() + "/NameOfFile.jpg")); 

and you must add permission to the manifest file ..

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

+9
source

Do not complicate complex code, just try, please, under the code below.

Create the first directory on the SD card:

 public static String strpath = android.os.Environment.getExternalStorageDirectory().toString(); public static String dirName = "DIR_NAME"; File makeDirectory = new File(strpath+"/"+dirName); makeDirectory.mkdir(); 

Then you should make two lines of Var, as shown below:

 String filename = "yourImageName".jpg"; String dirpath =strpath + "/"+dirName + "/"; 

Make file variable:

 File storagePath = new File(dirpath); File myImage = new File(storagePath, filename); outStream = new FileOutputStream(myImage); outStream.write(data); outStream.close(); 

Hope this helps you.

+6
source

Source: https://habr.com/ru/post/1443397/


All Articles