2012-02-22 22 views
8

Estoy usando una vista de imagen y un botón en 1 XML, y estoy recuperando las imágenes como URL del servidor web y mostrándolas en ImageView. Ahora, si se hace clic en el botón (Guardar), debo guardar esa imagen en particular en la tarjeta SD. ¿Como hacer esto?Cómo guardar la imagen en la tarjeta SD en el botón Haga clic en android

NOTA: la imagen actual se debe guardar.

+1

Hay muchas respuestas a su pregunta, el uso de búsqueda en primer lugar! http://stackoverflow.com/questions/4875114/android-save-image-from-url-onto-sd-card –

Respuesta

49

En primer lugar, usted necesita para obtener su mapa de bits. Ya se puede tenerlo como un mapa de bits objeto, o puede tratar de conseguirlo desde el ImageView tales como:

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

A continuación, debe llegar al directorio (un objeto File) de tarjetas SD, tales como:

File sdCardDirectory = Environment.getExternalStorageDirectory(); 

a continuación, crear un archivo específico para almacenamiento de imágenes:

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

Después de eso, sólo tiene que escribir el mapa de bits gracias a su método compress tales como:

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

Por último, solo tiene que lidiar con el resultado booleano si es necesario. Tales como:

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

No se olvide de añadir el siguiente permiso en su Manifiesto:

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

R u Claro, Este ejemplo guarda la imagen actual en el botón. Probé pero no se guardó –

+0

Rectificado.Muy, muy, claro, ejemplo..Trabajos Genial, Gracias amigo –

+0

@ Romain: Cómo guardar las imágenes en diferentes nombres.Si clics para guardar otra imagen, la imagen anterior se sobrescribió ... Si necesitamos calcular la cantidad de imágenes almacenadas allí para hacerlo, –

5

Solución probable es

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 muestra null man –

+1

funciona en mi proyecto ... gracias. – Drx

Cuestiones relacionadas