我想知道如何通过按钮点击将图像保存到用户的SD卡中。有人可以向我展示如何做吗?该图片是以.png格式存储在drawable目录中。我想编写一个按钮程序来将该图片保存到用户的SD卡中。
我想知道如何通过按钮点击将图像保存到用户的SD卡中。有人可以向我展示如何做吗?该图片是以.png格式存储在drawable目录中。我想编写一个按钮程序来将该图片保存到用户的SD卡中。
保存文件的过程(在您的情况下是图像)在这里描述:save-file-to-sd-card
假设您有一个名为ic_launcher的图像在drawable中。然后从此图像获取一个位图对象,如下所示:
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
权限。
我认为这个问题没有真正的解决方案,唯一的方法是像这样从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);
如果您使用Kotlin,您可以这样做:
val mDrawable: Drawable? = baseContext.getDrawable(id)
val mbitmap = (mDrawable as BitmapDrawable).bitmap
val mfile = File(externalCacheDir, "myimage.PNG")
try {
val outStream = FileOutputStream(mfile)
mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)
outStream.flush()
outStream.close()
} catch (e: Exception) {
throw RuntimeException(e)
}