如何将Drawable资源写入文件?

时间:2012-04-16 12:49:38

标签: android export drawable

我需要将一些Drawable资源导出到文件中。

例如,我有一个函数可以返回Drawable个对象。我想把它写到/sdcard/drawable/newfile.png中的文件中。我该怎么办?

3 个答案:

答案 0 :(得分:26)

虽然这里最好的答案有一个很好的方法。它只是链接。以下是您可以采取以下措施的方法:

将Drawable转换为位图

您可以通过至少两种不同的方式执行此操作,具体取决于您从Drawable获取的位置。

  1. Drawable在res/drawable个文件夹中。
  2. 假设您要使用可绘制文件夹中的Drawable。您可以使用BitmapFactory#decodeResource方法。示例如下。

    Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.your_drawable);
    
    1. 您有PictureDrawable个对象。
    2. 如果您从其他地方获得PictureDrawable"在运行时",您可以使用Bitmap#createBitmap方法创建Bitmap。如下例所示。

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

      将位图保存到磁盘

      获得Bitmap对象后,可以将其保存到永久存储中。您只需选择文件格式(JPEG,PNG或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;
      }
      

      要获取目标目录,请尝试以下操作:

      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:如果您正在处理大型图片或许多图片,请记住在后台线程上执行此类工作,因为它可能需要一些时间才能完成并可能会阻止您用户界面,使您的应用无响应。

答案 1 :(得分:23)

  1. 将Drawable转换为位图:How to convert a Drawable to a Bitmap?
  2. 将位图保存到文件:Save bitmap to location

答案 2 :(得分:-8)

获取存储在SD卡中的图像..

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

}

更新

String path = Environment.getExternalStorageDirectory()+ "/Images/test.jpg"; 
File imgFile = new File(path);