保存从本地InputStream检索的图像

时间:2011-11-04 16:29:26

标签: android inputstream drawable

我使用以下代码从网址中检索图片并将其显示在活动中。

    InputStream is = (InputStream) new URL(url[0]).getContent();
    Drawable d = Drawable.createFromStream(is, "imagename");
    ImageView... 

现在我想在用户点击按钮时在本地保存此图像(Drawable d),这样我就可以在另一个活动中再次显示它(以及其他一些任务)。

我想将它存储在app文件夹中,而不是存储在SD卡中。

我该怎么做?

谢谢! 香农

4 个答案:

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