Guardar imagen en sdcard desde un recurso de drawble en Android

Me pregunto cómo guardar una imagen en el sdcard del usuario a través de un clic de botón. ¿Podría alguien mostrarme cómo hacerlo. La imagen está en formato .png y se almacena en el directorio dibujable. Quiero programar un botón para guardar esa imagen en la tarjeta SD del usuario.

2 Solutions collect form web for “Guardar imagen en sdcard desde un recurso de drawble en Android”

El proceso de guardar un archivo (que es una imagen en su caso) se describe aquí: save-file-to-sd-card


Guardar la imagen en la tarjeta sdcard desde el recurso drawble:

Digamos que usted tiene una imagen es decir ic_launcher en su dibujable. A continuación, obtenga un objeto de mapa de bits de esta imagen como:

Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher); 

La ruta a la tarjeta SD se puede recuperar utilizando:

 String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 

A continuación, guarde en sdcard en el botón haga clic con:

 File file = new File(extStorageDirectory, "ic_launcher.PNG"); outStream = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); outStream.flush(); outStream.close(); 

No olvide añadir permiso de android.permission.WRITE_EXTERNAL_STORAGE .

Aquí está el archivo modificado para guardar desde drawable : SaveToSd , un proyecto de ejemplo completo: SaveImage

Creo que no hay una solución real en esa cuestión, la única manera de hacerlo es copiar y lanzar desde sd_card cache dir así:

 Bitmap bm = BitmapFactory.decodeResource(getResources(), resourceId); File f = new File(getExternalCacheDir()+"/image.png"); try { FileOutputStream outStream = new FileOutputStream(f); bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); outStream.flush(); outStream.close(); } catch (Exception e) { throw new RuntimeException(e); } Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(f), "image/png"); startActivity(intent); // NOT WORKING SOLUTION // Uri path = Uri.parse("android.resource://" + getPackageName() + "/" + resourceId); // Intent intent = new Intent(); // intent.setAction(android.content.Intent.ACTION_VIEW); // intent.setDataAndType(path, "image/png"); // startActivity(intent); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.