gpt4 book ai didi

android - 如何将 Drawable 资源写入文件?

转载 作者:IT老高 更新时间:2023-10-28 23:03:43 26 4
gpt4 key购买 nike

我需要将一些 Drawable 资源导出到文件中。

例如,我有一个函数返回给我一个 Drawable 对象。我想把它写到 /sdcard/drawable/newfile.png 中的一个文件中。我该怎么做?

最佳答案

虽然这里的最佳答案有一个很好的方法。它只是链接。步骤如下:

将 Drawable 转换为位图

您至少可以通过两种不同的方式做到这一点,具体取决于您从哪里获取 Drawable

  1. Drawable 位于 res/drawable 文件夹中。

假设您要使用可绘制文件夹上的 Drawable。您可以使用 BitmapFactory#decodeResource方法。下面的例子。

Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.your_drawable);
  1. 你有一个 PictureDrawable对象。

如果您收到 PictureDrawable从其他地方“在运行时”,您可以使用 Bitmap#createBitmap创建 Bitmap 的方法。就像下面的例子。

public Bitmap drawableToBitmap(PictureDrawable pd) {
Bitmap bm = Bitmap.createBitmap(pd.getIntrinsicWidth(), pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bm);
canvas.drawPicture(pd.getPicture());
return bm;
}

将位图保存到磁盘

一旦您有了 Bitmap 对象,您就可以将它保存到永久存储中。您只需选择文件格式(JPEG、PNG 或 WEBP)。

/**
* @param dir you can get from many places like Environment.getExternalStorageDirectory() or mContext.getFilesDir() depending on where you want to save the image.
* @param fileName The file name.
* @param bm The Bitmap you want to save.
* @param format Bitmap.CompressFormat can be PNG,JPEG or WEBP.
* @param quality quality goes from 1 to 100. (Percentage).
* @return true if the Bitmap was saved successfully, false otherwise.
*/
boolean saveBitmapToFile(File dir, String fileName, Bitmap bm,
Bitmap.CompressFormat format, int quality) {

File imageFile = new File(dir,fileName);

FileOutputStream fos = null;
try {
fos = new FileOutputStream(imageFile);

bm.compress(format,quality,fos);

fos.close();

return true;
}
catch (IOException e) {
Log.e("app",e.getMessage());
if (fos != null) {
try {
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return false;
}

要获取目标目录,请尝试以下操作:

File dir = new File(Environment.getExternalStorageDirectory() + File.separator + "drawable");

boolean doSave = true;
if (!dir.exists()) {
doSave = dir.mkdirs();
}

if (doSave) {
saveBitmapToFile(dir,"theNameYouWant.png",bm,Bitmap.CompressFormat.PNG,100);
}
else {
Log.e("app","Couldn't create target directory.");
}

Obs:如果您正在处理大图像或许多图像,请记住在后台线程上执行此类工作,因为它可能需要一些时间才能完成并且可能会阻塞您的 UI,使您的应用无响应。

关于android - 如何将 Drawable 资源写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10174399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com