我使用以下代码从网址中检索图片并将其显示在活动中。
InputStream is = (InputStream) new URL(url[0]).getContent();
Drawable d = Drawable.createFromStream(is, "imagename");
ImageView...
现在我想在用户点击按钮时在本地保存此图像(Drawable d),这样我就可以在另一个活动中再次显示它(以及其他一些任务)。
我想将它存储在app文件夹中,而不是存储在SD卡中。
我该怎么做?
谢谢! 香农
答案 0 :(得分:3)
这将为你做到:
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
FileOutputStream out = openFileOutput(filename, Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
答案 1 :(得分:1)
对于Drawable另存为图像,我这样做,
Bitmap image_saved=BitmapFactory.decodeResource(context.getResources(),R.drawable.icon);
FileOutputStream fOut=new FileOutputStream(path+"/"+fileName);
// Here path is either sdcard or internal storage
image_saved.compress(Bitmap.CompressFormat.JPEG,100,fOut);
fOut.flush();
fOut.close();
image_saved.recycle(); // If no longer used..
但实际上,我建议你不要从InputStream转到Drawable,而是从InputStream转到File,然后将图像加载到文件中。因此,您可以保存第一个文件并在加载图像时使用它。
对于url Inputstream编写文件,请查看本教程Save binary file from URL
答案 2 :(得分:0)
请查看此documentation以了解如何保存缓存文件,并查看此documentation以进行常规内部文件存储。
答案 3 :(得分:0)
经过测试的代码段:
InputStream is=null;
try {
is = (InputStream) new URL(url).getContent();
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Drawable d = Drawable.createFromStream(is, "profile_picture");
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
FileOutputStream out=null;
try {
out = getActivity().getApplicationContext().openFileOutput("profile_picture", getActivity().getApplicationContext().MODE_PRIVATE);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);