Save bitmap to location

前端 未结 19 2397
悲哀的现实
悲哀的现实 2020-11-22 00:20

I am working on a function to download an image from a web server, display it on the screen, and if the user wishes to keep the image, save it on the SD card in a certain fo

相关标签:
19条回答
  • 2020-11-22 00:43

    Inside onActivityResult:

    String filename = "pippo.png";
    File sd = Environment.getExternalStorageDirectory();
    File dest = new File(sd, filename);
    
    Bitmap bitmap = (Bitmap)data.getExtras().get("data");
    try {
         FileOutputStream out = new FileOutputStream(dest);
         bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
         out.flush();
         out.close();
    } catch (Exception e) {
         e.printStackTrace();
    }
    
    0 讨论(0)
  • 2020-11-22 00:43

    Create a video thumbnail for a video. It may return null if the video is corrupted or the format is not supported.

    private void makeVideoPreview() {
        Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(videoAbsolutePath, MediaStore.Images.Thumbnails.MINI_KIND);
        saveImage(thumbnail);
    }
    

    To Save your bitmap in sdcard use the following code

    Store Image

    private void storeImage(Bitmap image) {
        File pictureFile = getOutputMediaFile();
        if (pictureFile == null) {
            Log.d(TAG,
                    "Error creating media file, check storage permissions: ");// e.getMessage());
            return;
        } 
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            image.compress(Bitmap.CompressFormat.PNG, 90, fos);
            fos.close();
        } catch (FileNotFoundException e) {
            Log.d(TAG, "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d(TAG, "Error accessing file: " + e.getMessage());
        }  
    }
    

    To Get the Path for Image Storage

    /** Create a File for saving an image or video */
    private  File getOutputMediaFile(){
        // To be safe, you should check that the SDCard is mounted
        // using Environment.getExternalStorageState() before doing this. 
        File mediaStorageDir = new File(Environment.getExternalStorageDirectory()
                + "/Android/data/"
                + getApplicationContext().getPackageName()
                + "/Files"); 
    
        // This location works best if you want the created images to be shared
        // between applications and persist after your app has been uninstalled.
    
        // Create the storage directory if it does not exist
        if (! mediaStorageDir.exists()){
            if (! mediaStorageDir.mkdirs()){
                return null;
            }
        } 
        // Create a media file name
        String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date());
        File mediaFile;
            String mImageName="MI_"+ timeStamp +".jpg";
            mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);  
        return mediaFile;
    } 
    
    0 讨论(0)
  • 2020-11-22 00:43

    Save Bitmap to your Gallery Without Compress.

    private File saveBitMap(Context context, Bitmap Final_bitmap) {
        File pictureFileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Your Folder Name");
        if (!pictureFileDir.exists()) {
            boolean isDirectoryCreated = pictureFileDir.mkdirs();
            if (!isDirectoryCreated)
                Log.i("TAG", "Can't create directory to save the image");
            return null;
        }
        String filename = pictureFileDir.getPath() + File.separator + System.currentTimeMillis() + ".jpg";
        File pictureFile = new File(filename);
        try {
            pictureFile.createNewFile();
            FileOutputStream oStream = new FileOutputStream(pictureFile);
            Final_bitmap.compress(Bitmap.CompressFormat.PNG, 100, oStream);
            oStream.flush();
            oStream.close();
            Toast.makeText(Full_Screen_Activity.this, "Save Image Successfully..", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("TAG", "There was an issue saving the image.");
        }
        scanGallery(context, pictureFile.getAbsolutePath());
        return pictureFile;
    }
    private void scanGallery(Context cntx, String path) {
        try {
            MediaScannerConnection.scanFile(cntx, new String[]{path}, null, new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Toast.makeText(Full_Screen_Activity.this, "Save Image Successfully..", Toast.LENGTH_SHORT).show();
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            Log.i("TAG", "There was an issue scanning gallery.");
        }
    }
    
    0 讨论(0)
  • 2020-11-22 00:45

    You should use the Bitmap.compress() method to save a Bitmap as a file. It will compress (if the format used allows it) your picture and push it into an OutputStream.

    Here is an example of a Bitmap instance obtained through getImageBitmap(myurl) that can be compressed as a JPEG with a compression rate of 85% :

    // Assume block needs to be inside a Try/Catch block.
    String path = Environment.getExternalStorageDirectory().toString();
    OutputStream fOut = null;
    Integer counter = 0;
    File file = new File(path, "FitnessGirl"+counter+".jpg"); // the File to save , append increasing numeric counter to prevent files from getting overwritten.
    fOut = new FileOutputStream(file);
    
    Bitmap pictureBitmap = getImageBitmap(myurl); // obtaining the Bitmap
    pictureBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // saving the Bitmap to a file compressed as a JPEG with 85% compression rate
    fOut.flush(); // Not really required
    fOut.close(); // do not forget to close the stream
    
    MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
    
    0 讨论(0)
  • 2020-11-22 00:46
    outStream = new FileOutputStream(file);
    

    will throw exception without permission in AndroidManifest.xml (at least in os2.2):

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
    0 讨论(0)
  • 2020-11-22 00:50

    Hey just give the name to .bmp

    Do this:

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    _bitmapScaled.compress(Bitmap.CompressFormat.PNG, 40, bytes);
    
    //you can create a new file name "test.BMP" in sdcard folder.
    File f = new File(Environment.getExternalStorageDirectory()
                            + File.separator + "**test.bmp**")
    

    it'll sound that IM JUST FOOLING AROUND but try it once it'll get saved in bmp foramt..Cheers

    0 讨论(0)
提交回复
热议问题