将图像从Android上的可绘制资源保存到SD卡

时间:2012-05-11 20:16:35

标签: android drawable sd-card android-image android-button

我想知道如何通过点击按钮将图像保存到用户的SD卡。 有人可以告诉我该怎么做。 Image为.png格式,存储在drawable目录中。我想编写一个按钮将该图像保存到用户的SD卡。

2 个答案:

答案 0 :(得分:38)

此处描述了保存文件(在您的案例中是图像)的过程:save-file-to-sd-card


将图像从drawble资源保存到SD卡:

假设您的drawable中有一张图像即ic_launcher。然后从这个图像中获取一个位图对象,如:

Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher);

可以使用以下方法检索SD卡的路径:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

然后使用以下按钮单击按钮保存到SD卡:

File file = new File(extStorageDirectory, "ic_launcher.PNG");
    FileOutputStream outStream = new FileOutputStream(file);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();

不要忘记添加android.permission.WRITE_EXTERNAL_STORAGE权限。

以下是从drawable中保存的已修改文件:SaveToSd ,一个完整的示例项目:SaveImage

答案 1 :(得分:1)

我认为在这个问题上没有真正的解决方案,唯一的方法是从sd_card缓存目录复制并启动,如下所示:

Bitmap bm = BitmapFactory.decodeResource(getResources(), resourceId);
File f = new File(getExternalCacheDir()+"/image.png");
try {
    FileOutputStream outStream = new FileOutputStream(f);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();
} catch (Exception e) { throw new RuntimeException(e); }

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(f), "image/png");
startActivity(intent);


// NOT WORKING SOLUTION
// Uri path = Uri.parse("android.resource://" + getPackageName() + "/" + resourceId);
// Intent intent = new Intent();
// intent.setAction(android.content.Intent.ACTION_VIEW);
// intent.setDataAndType(path, "image/png");
// startActivity(intent);