【问题标题】:Save Bitmap to SD Card将位图保存到 SD 卡
【发布时间】:2012-10-21 21:03:50
【问题描述】:

我有一张位图图像,我必须将其存储在 SD 卡的文件夹中,我的代码如下所示。它按预期创建文件夹和文件,但图像没有存储到文件中,它仍然是一个空文件......谁能告诉我出了什么问题?

Bitmap merged = Bitmap.createBitmap(mDragLayer.getChildAt(0).getWidth(), mDragLayer.getChildAt(0).getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(merged);

// save to folder in sd card
try {
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "folder");
    if(!imagesFolder.exists())
        imagesFolder.mkdirs();
    int imageNum;
    if(imagesFolder.list()==null)
        imageNum = 1;
    else
        imageNum = imagesFolder.list().length + 1;

    String fileName = "file_" + String.valueOf(imageNum) + ".jpg";
    File output = new File(imagesFolder, fileName);
    while(output.exists()){
        imageNum++;
        fileName = "file_" + String.valueOf(imageNum) + ".jpg";
        output = new File(imagesFolder, fileName);
    }

    OutputStream fOut = new FileOutputStream(output);
    merged.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    fOut.flush();
    fOut.close();

    Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();

   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
}

【问题讨论】:

    标签: android bitmap outputstream fileoutputstream


    【解决方案1】:

    首先给AndroidManifest.xml添加权限

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

    然后在Java文件中写下如下。

        String extr = Environment.getExternalStorageDirectory().toString();
                File mFolder = new File(extr + "/MyApp");
    
                if (!mFolder.exists()) {
                    mFolder.mkdir();
                }
    
                String strF = mFolder.getAbsolutePath();
                File mSubFolder = new File(strF + "/MyApp-SubFolder");
    
                if (!mSubFolder.exists()) {
                    mSubFolder.mkdir();
                }
    
                String s = "myfile.png";
    
                f = new File(mSubFolder.getAbsolutePath(),s);
    

    更新

               String strMyImagePath = f.getAbsolutePath();
                 FileOutputStream fos = null;
                 try {
                     fos = new FileOutputStream(f);
                     bitmap.compress(Bitmap.CompressFormat.PNG,70, fos);
    
                     fos.flush();
                     fos.close();
                  //   MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
                 }catch (FileNotFoundException e) {
    
                     e.printStackTrace();
                 } catch (Exception e) {
    
                     e.printStackTrace();
                 }
    

    【讨论】:

    • 我应该把实际的位图放在哪里?
    【解决方案2】:

    不要让复杂的代码变得困难,它真的很简单,请试试下面的代码。

    在你的 sd 卡中创建第一个目录:

    public static String strpath =  android.os.Environment.getExternalStorageDirectory().toString();
    public static String dirName = "DIR_NAME";
    
    File makeDirectory = new File(strpath+"/"+dirName);
    makeDirectory.mkdir();
    

    那么你应该像下面这样创建两个 String Var:

    String filename =  "yourImageName".jpg";
    String dirpath =strpath + "/"+dirName + "/";
    

    使文件变量:

    File storagePath =  new File(dirpath);
    File myImage = new File(storagePath, filename);
    outStream = new FileOutputStream(myImage);  
    outStream.write(data);
    outStream.close();
    

    希望这对你有帮助。

    【讨论】:

      【解决方案3】:

      你只需要一张位图

      你必须传递一个路径来存储图像

      Bitmap b = pagesView.getDrawingCache();
      b.compress(CompressFormat.JPEG, 100, new FileOutputStream(Environment.getExternalStorageDirectory() + "/NameOfFile.jpg"));
      

      你必须在清单文件中添加权限..

      &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;

      【讨论】:

        猜你喜欢
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多