将图片从Android的drawable资源保存到SD卡上

11 浏览
0 Comments

将图片从Android的drawable资源保存到SD卡上

我想知道如何通过点击按钮将图片保存到用户的SD卡中。\n可以有人告诉我如何做吗?这个图片是以.png格式存储在drawable目录中。我想编写一个按钮来将该图片保存到用户的SD卡中。

0
0 Comments

问题出现的原因是需要将drawable资源保存到sdcard上。解决方法如下:

如果使用Kotlin,可以按照以下步骤进行操作:

1. 获取drawable资源的Drawable对象:

val mDrawable: Drawable? = baseContext.getDrawable(id)

2. 将Drawable对象转换为Bitmap对象:

val mbitmap = (mDrawable as BitmapDrawable).bitmap

3. 创建一个File对象,用于保存图片:

val mfile = File(externalCacheDir, "myimage.PNG")

4. 将Bitmap对象保存到File对象指定的路径上:

try {

val outStream = FileOutputStream(mfile)

mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)

outStream.flush()

outStream.close()

} catch (e: Exception) {

throw RuntimeException(e)

}

以上就是将drawable资源保存到sdcard的解决方法。

0
0 Comments

问题的出现原因是无法直接将drawable资源保存到SD卡上。解决方法是先将drawable资源转换为Bitmap,然后将Bitmap保存到SD卡上,最后通过Intent启动保存的图片。

具体解决方法如下:

1. 使用BitmapFactory的decodeResource方法将drawable资源转换为Bitmap。

2. 创建一个File对象,指定保存到SD卡的路径和文件名。

3. 使用FileOutputStream将Bitmap写入到指定的文件。

4. 关闭输出流。

5. 创建一个Intent对象,并设置Action为ACTION_VIEW,用于打开保存的图片。

6. 设置Intent的数据和类型,指定保存的图片文件的URI和MIME类型。

7. 使用startActivity方法启动Intent,打开保存的图片。

需要注意的是,上述代码中注释掉的部分是一种不起作用的解决方法,无法直接使用资源的URI来启动Intent。正确的方法是先将资源转换为Bitmap,然后保存到SD卡上,再通过保存的文件的URI来启动Intent。

完整代码如下:

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

0
0 Comments

从上述内容中,可以得出以下文章:

如何从可绘制资源中将图像保存到sd卡上

要保存文件(在这种情况下是图像),请按照以下步骤进行操作:

首先,从drawable文件夹中获取图像的bitmap对象:

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文件夹中保存图像,那么只需要获取图像的bitmap对象,并使用上述代码即可。

如果遇到outStream cannot be resolved to a variable的错误,请查看示例项目中的完整代码,下载链接:SaveImage

如果想要添加设置壁纸的按钮,但遇到错误,请下载带有保存按钮和设置壁纸按钮的示例项目,下载链接:Save Image

关于为什么会保存两份图像的问题,有用户提到可能是因为手机屏幕密度的原因,具体可以参考这个链接这个链接

如果保存的透明图像变成黑色,请尝试其他解决方案。

0