Сохранить изображение на SD-карте из ресурса на Android

Мне интересно, как сэкономить изображение на пользовательской SD-карте, нажав кнопку. Может ли кто-нибудь показать мне, как это сделать. Изображение находится в формате .png, и оно сохраняется в каталоге с возможностью рисования. Я хочу запрограммировать кнопку, чтобы сохранить это изображение на пользовательской SD-карте.

Ответ 1

Процесс сохранения файла (который является изображением в вашем случае) описан здесь: save-file-to-sd-card


Сохранение изображения на SD-карте из ресурса drawble:

Скажите, что у вас есть изображение, а именно ic_launcher. Затем получим растровый объект с этого изображения, например:

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

Путь к SD-карте можно получить, используя:

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

Затем сохраните на sdcard при нажатии кнопки, используя:

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

Не забудьте добавить разрешение android.permission.WRITE_EXTERNAL_STORAGE.

Вот измененный файл для сохранения из drawable: SaveToSd , полный образец проекта: SaveImage

Ответ 2

Я думаю, что нет никакого реального решения по этому вопросу, единственный способ сделать это - копирование и запуск из dd файла 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);