android - 将位图保存到 SD 卡

标签 android bitmap outputstream fileoutputstream

我有一个位图图像,我必须将其存储在 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();
   }
}

最佳答案

首先在AndroidManifest.xml中添加权限

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

然后在Java File中写下如下。

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

关于android - 将位图保存到 SD 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174318/

相关文章:

java - 使用java/android中给定的点绘制凸包

android - 另一个类中的错误 getResource()

java - Android/Java - 如何检查 OutputStream 何时完成写入字节

java - Access (.mdb) 文件在 servlet 写入客户端期间损坏

Java:如何使用命令行打开程序并进行交互

java - 在 Android 上优雅地处理 RxJava 订阅?

android - 将 JAR 库包含到 android 项目并从中启动 Activity

java - Jsoup 在第一个元素之后选择元素

java - 滚动屏幕位图,在 SurfaceView 上向下一行不起作用

java - 将位图大小调整为 512x512 而不改变原始纵横比