¿Cómo puedo escribir un recurso Drawable en un archivo?

Necesito exportar algunos recursos Drawable a un archivo.

Por ejemplo, tengo una función que me devuelve un objeto Drawable . Quiero escribirlo en un archivo en /sdcard/drawable/newfile.png . ¿Cómo puedo hacerlo?

Aunque la mejor respuesta aquí tiene un enfoque agradable. Sólo es enlace. A continuación, le indicamos cómo realizar los pasos siguientes:

Convertir dibujable en mapa de bits

Puedes hacerlo en al menos dos maneras diferentes, dependiendo de dónde vas a conseguir el Drawable .

  1. Dibujable está en carpetas res/drawable .

Digamos que quieres usar un Drawable que esté en tus carpetas Drawable . Puede utilizar el enfoque BitmapFactory#decodeResource . Ejemplo a continuación.

 Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.your_drawable); 
  1. Tiene un objeto PictureDrawable .

Si obtiene un PictureDrawable desde otro lugar "en tiempo de ejecución", puede utilizar el método Bitmap#createBitmap para crear su Bitmap . Como el siguiente ejemplo.

 public Bitmap drawableToBitmap(PictureDrawable pd) { Bitmap bm = Bitmap.createBitmap(pd.getIntrinsicWidth(), pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bm); canvas.drawPicture(pd.getPicture()); return bm; } 

Guardar el mapa de bits en el disco

Una vez que tenga su objeto Bitmap , puede guardarlo en el almacenamiento permanente. Sólo tendrá que elegir el formato de archivo (JPEG, PNG o WEBP).

 /** * @param dir you can get from many places like Environment.getExternalStorageDirectory() or mContext.getFilesDir() depending on where you want to save the image. * @param fileName The file name. * @param bm The Bitmap you want to save. * @param format Bitmap.CompressFormat can be PNG,JPEG or WEBP. * @param quality quality goes from 1 to 100. (Percentage). * @return true if the Bitmap was saved successfully, false otherwise. */ boolean saveBitmapToFile(File dir, String fileName, Bitmap bm, Bitmap.CompressFormat format, int quality) { File imageFile = new File(dir,fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(imageFile); bm.compress(format,quality,fos); fos.close(); return true; } catch (IOException e) { Log.e("app",e.getMessage()); if (fos != null) { try { fos.close(); } catch (IOException e1) { e1.printStackTrace(); } } } return false; } 

Y para obtener el directorio de destino, pruebe algo como:

 File dir = new File(Environment.getExternalStorageDirectory() + File.separator + "drawable"); boolean doSave = true; if (!dir.exists()) { doSave = dir.mkdirs(); } if (doSave) { saveBitmapToFile(dir,"theNameYouWant.png",bm,Bitmap.CompressFormat.PNG,100); } else { Log.e("app","Couldn't create target directory."); } 

Obs: recuerde hacer este tipo de trabajo en un tema de fondo si está tratando con imágenes grandes o con muchas imágenes, ya que puede llevar algún tiempo terminar y podría bloquear su interfaz de usuario, haciendo que su aplicación no responda.

  1. Convertir Drawable a Bitmap: ¿Cómo convertir un dibujable a un mapa de bits?
  2. Guardar mapa de bits en un archivo: Guardar mapa de bits en la ubicación

Obtener la imagen almacenada en sdcard ..

 File imgFile = new File(“/sdcard/Images/test_image.jpg”); if(imgFile.exists()){ Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); ImageView myImage = (ImageView) findViewById(R.id.imageviewTest); myImage.setImageBitmap(myBitmap); } 

Actualizar:

 String path = Environment.getExternalStorageDirectory()+ "/Images/test.jpg"; File imgFile = new File(path); 
  • Exportación de Android: cómo crear el archivo .keystore?
  • Base de datos de exportación de importación android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.