2012-02-22 14 views
8

Używam obrazu i przycisku w 1 pliku XML, a ja odtwarzam obrazy jako adres URL z serwera WWW i wyświetlając go w ImageView. Teraz, po kliknięciu przycisku (Zapisz), muszę zapisać ten konkretny obraz na karcie SD. Jak to zrobić?Jak zapisać obraz na karcie SD na przycisku Kliknij przycisk android

UWAGA: Aktualny obraz Należy zapisać.

+1

Istnieje wiele odpowiedzi na to pytanie, użycie wyszukiwania pierwszy! http://stackoverflow.com/questions/4875114/android-save-image-from-url-onto-sd-card –

Odpowiedz

49

Najpierw trzeba uzyskać bitmapę. już można mieć go jako Bitmap obiektu, można też spróbować dostać go od ImageView takich jak:

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

Następnie trzeba dostać się do katalogu (a File obiektu) z kartą SD, takich jak:

File sdCardDirectory = Environment.getExternalStorageDirectory(); 

Następnie utwórz swój konkretny plik do przechowywania obrazów:

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

potem, po prostu trzeba napisać bitmapy dzięki metodzie compress takie jak:

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(); 
    } 

Wreszcie, po prostu zajmij się wynikiem boolean, jeśli to konieczne. Takich jak:

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(); 
    } 

Nie zapomnij dodać następujące uprawnienia w swoim manifeście:

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

R u Sure, Ten przykład zapisuje obecny obraz na buttonclick.Spróbowałem, ale nie został zapisany –

+0

Rectified. Very bardzo jasny przykład .. Działa świetnie, Dzięki, koleś –

+0

@ Romain: Jak zapisać obrazy w różnych nazwach.Jeśli kliknięcia, aby zapisać inny obraz Poprzedni obraz został pominięty. Czyli aby obliczyć liczbę zapisanych tam obrazów, należy to zrobić. –

5

prawdopodobnym rozwiązaniem jest

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 pokazuje pustego człowieka –

+1

działa w moim projekcie .. dziękuję. – Drx

Powiązane problemy