2012-02-22 12 views
8

Sto utilizzando un'immagine di anteprima e un pulsante in 1 XML e sto recuperando le immagini come URL da WebServer e mostrandole su ImageView. Ora se si fa clic sul pulsante (Salva), ho bisogno di salvare quella particolare immagine nella scheda SD. Come fare questo?Come salvare l'immagine sulla scheda SD sul pulsante Fare clic su Android

NOTA: Immagine presente deve essere salvata.

+1

Ci sono un sacco di risposte alla tua domanda, l'uso di ricerca in primo luogo! http://stackoverflow.com/questions/4875114/android-save-image-from-url-onto-sd-card –

risposta

49

primo luogo, è necessario ottenere il vostro bitmap. Si può già avere come un Bitmap oggetto, oppure si può cercare di ottenere dalla ImageView come ad esempio:

BitmapDrawable drawable = (BitmapDrawable) mImageView1.getDrawable(); 
    Bitmap bitmap = drawable.getBitmap(); 

Quindi è necessario arrivare a directory (un oggetto File) dalla scheda SD come ad esempio:

File sdCardDirectory = Environment.getExternalStorageDirectory(); 

Successivamente, creare il file specifico per l'archiviazione delle immagini:

File image = new File(sdCardDirectory, "test.png"); 

Dopo di che, basta scrivere il bitmap grazie al suo metodo di compress quali:

boolean success = false; 

    // Encode the file as a PNG image. 
    FileOutputStream outStream; 
    try { 

     outStream = new FileOutputStream(image); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     /* 100 to keep full quality of the image */ 

     outStream.flush(); 
     outStream.close(); 
     success = true; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Infine, basta gestire il risultato booleano se necessario. Come ad esempio:

if (success) { 
     Toast.makeText(getApplicationContext(), "Image saved with success", 
       Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(getApplicationContext(), 
       "Error during image saving", Toast.LENGTH_LONG).show(); 
    } 

Non dimenticare di aggiungere la seguente autorizzazione vostro manifesto:

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

R Sì, questo esempio salva l'immagine presente su buttonclick.ho provato ma non viene salvato –

+0

Rettificato.Very molto chiaro esempio..Un grande lavoro, grazie amico –

+0

@ Romain: come salvare le immagini in nomi diversi. Se ho clicca per salvare altra immagine l'immagine precedente è stata sovrascritta. Se è necessario calcolare il conteggio delle immagini memorizzate lì per farlo, –

5

soluzione probabile è

Android - Saving a downloaded image from URL onto SD card

Bitmap bitMapImg; 
void saveImage() { 
     File filename; 
     try { 
      String path = Environment.getExternalStorageDirectory().toString(); 

      new File(path + "/folder/subfolder").mkdirs(); 
      filename = new File(path + "/folder/subfolder/image.jpg"); 

      FileOutputStream out = new FileOutputStream(filename); 

      bitMapImg.compress(Bitmap.CompressFormat.JPEG, 90, out); 
      out.flush(); 
      out.close(); 

      MediaStore.Images.Media.insertImage(getContentResolver(), filename.getAbsolutePath(), filename.getName(), filename.getName()); 

      Toast.makeText(getApplicationContext(), "File is Saved in " + filename, 1000).show(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
+0

bmImg mostra null man –

+1

funziona nel mio progetto .. grazie. – Drx

Problemi correlati