将位图保存到文件中并返回具有位图图像的文件

Posted

技术标签:

【中文标题】将位图保存到文件中并返回具有位图图像的文件【英文标题】:Save Bitmap into File and return File having bitmap image 【发布时间】:2013-03-15 09:40:21 【问题描述】:

我无法将位图保存到文件中。 我的方法是这样的:

private File savebitmap(Bitmap bmp) 
    String extStorageDirectory = Environment.getExternalStorageDirectory()
            .toString();
    OutputStream outStream = null;

    File file = new File(bmp + ".png");
    if (file.exists()) 
        file.delete();
        file = new File(extStorageDirectory, bmp + ".png");
        Log.e("file exist", "" + file + ",Bitmap= " + bmp);
    
    try 
        outStream = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);
        outStream.flush();
        outStream.close();
     catch (Exception e) 
        e.printStackTrace();
    
    Log.e("file", "" + file);
    return file;


它给了我文件错误。我这样调用这个方法:

Drawable d = iv.getDrawable();
Bitmap bitmap = ((BitmapDrawable) d).getBitmap();
File file = savebitmap(bitmap);

请帮帮我...

【问题讨论】:

这行 File file = new File(bmp + ".png"); 是什么意思? 定义“文件错误”(即post stacktrace) @FestusTamakloe 我猜他错误地假设bmp.toString() 将返回bmp 的name 你必须给你的文件一个真实的名字,bmp + ".png" 不起作用。请同时发布您的错误堆栈 【参考方案1】:

我尝试对您的代码进行一些更正 我假设您想使用文件名而不是位图作为参数

 private File savebitmap(String filename) 
      String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
      OutputStream outStream = null;

      File file = new File(filename + ".png");
      if (file.exists()) 
         file.delete();
         file = new File(extStorageDirectory, filename + ".png");
         Log.e("file exist", "" + file + ",Bitmap= " + filename);
      
      try 
         // make a new bitmap from your file
         Bitmap bitmap = BitmapFactory.decodeFile(file.getName());

         outStream = new FileOutputStream(file);
         bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
         outStream.flush();
         outStream.close();
       catch (Exception e) 
         e.printStackTrace();
      
      Log.e("file", "" + file);
      return file;

   

【讨论】:

【参考方案2】:

你不能这样写

 File file = new File(bmp + ".png");

而且这一行也是错误的

file = new File(extStorageDirectory, bmp + ".png");

你必须给 string 值而不是位图。

 File file = new File(filename + ".png"); 

【讨论】:

【参考方案3】:

改变 文件 file = new File(bmp + ".png"); 到 文件 file = new File(extStorageDirectory,"bmp.png"); 就像你几乎第二次做的那样。

【讨论】:

以上是关于将位图保存到文件中并返回具有位图图像的文件的主要内容,如果未能解决你的问题,请参考以下文章

将位图保存到位置

将位图保存到文件导致黑色图像

如何使用matlab将256灰度位图图像保存为24位灰度图像?

从位图图像列表创建 .avi 文件

将位图从 arraylist 保存到 SD 卡 - 保存的文件不可读

C++如何把位图保存到数组中