web-dev-qa-db-fra.com

Android Sauvegarde du bitmap créé dans le répertoire de la carte SD

J'ai créé un bitmap et maintenant je veux enregistrer ce bitmap dans un répertoire quelque part. Quelqu'un peut-il me montrer comment cela se fait? Merci

FileInputStream in;
          BufferedInputStream buf;
           try {
                  in = new FileInputStream("/mnt/sdcard/dcim/Camera/2010-11-16_18-57-18_989.jpg");
                  buf = new BufferedInputStream(in);
                  Bitmap _bitmapPreScale = BitmapFactory.decodeStream(buf);
                  int oldWidth = _bitmapPreScale.getWidth();
                  int oldHeight = _bitmapPreScale.getHeight();
                  int newWidth = 2592; 
                  int newHeight = 1936;

                  float scaleWidth = ((float) newWidth) / oldWidth;
                  float scaleHeight = ((float) newHeight) / oldHeight;

                  Matrix matrix = new Matrix();
               // resize the bit map
                  matrix.postScale(scaleWidth, scaleHeight);
                  Bitmap _bitmapScaled = Bitmap.createBitmap(_bitmapPreScale, 0, 0,  oldWidth, oldHeight, matrix, true);

(Je veux enregistrer _bitmapScaled dans un dossier de ma carte SD)

30
user516883

Salut Vous pouvez écrire des données en octets, puis créer un fichier dans le dossier sdcard avec le nom et l'extension de votre choix, puis écrire les octets dans ce fichier. Ceci sauvera le bitmap sur la carte SD.

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
_bitmapScaled.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

//you can create a new file name "test.jpg" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
                        + File.separator + "test.jpg");
f.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());

// remember close de FileOutput
fo.close();
103
krunal shah

Vous pouvez aussi essayer ceci.

  OutputStream fOut = null;
                        File file = new File(strDirectoy,imgname);
                            fOut = new FileOutputStream(file);

                        bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                            fOut.flush();
                            fOut.close();

                MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
11
Andro Selva

changez simplement l'extension en .bmp .

Faire ceci:

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

Cela va sembler que je suis juste en train de rigoler, mais essayez une fois et il sera enregistré au format BMP À votre santé!

4
Mayank Saini

_bitmapScaled.compress() devrait faire l'affaire. Découvrez les documents: http://developer.Android.com/reference/Android/graphics/Bitmap.html#compress(Android.graphics.Bitmap.CompressFormat , int, Java.io.OutputStream)

4
EboMike

Cette réponse est une mise à jour avec un peu plus de considération pour OOM et diverses autres fuites.

Suppose que vous avez un répertoire destiné à la destination et un nom String déjà défini.

    File destination = new File(directory.getPath() + File.separatorChar + filename);

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    source.compress(Bitmap.CompressFormat.PNG, 100, bytes);

    FileOutputStream fo = null;
    try {
        destination.createNewFile();

        fo = new FileOutputStream(destination);
        fo.write(bytes.toByteArray());
    } catch (IOException e) {

    } finally {
        try {
            fo.close();
        } catch (IOException e) {}
    }
0
Abandoned Cart

Passez bitmap à la méthode saveImage, cela enregistrera votre bitmap au nom d’un saveBitmap, dans le dossier de test créé.

private void saveImage(Bitmap data) {
                    File createFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"test");
                    if(!createFolder.exists())
                    createFolder.mkdir();
                    File saveImage = new File(createFolder,"saveBitmap.jpg");
                    try {
                        OutputStream outputStream = new FileOutputStream(saveImage);
                        data.compress(Bitmap.CompressFormat.JPEG,100,outputStream);
                        outputStream.flush();
                        outputStream.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

et utiliser ceci:

  saveImage(bitmap);
0
Opriday