Сохранение изображения, полученного из InputStream локально - PullRequest
1 голос
/ 04 ноября 2011

Я использовал следующий код, чтобы извлечь изображение из URL и отобразить его внутри действия.

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

Теперь я хочу сохранить это изображение (Drawable d) локально, когда пользователь нажимает кнопку, чтобы я мог снова отобразить его в другом упражнении (наряду с несколькими другими задачами).

Я бы хотел сохранить его в самой папке приложения, а не на SD-карте.

Как бы я это сделал?

Спасибо! Shannon

Ответы [ 4 ]

3 голосов
/ 04 ноября 2011

Это сделает за вас:

Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
FileOutputStream out = openFileOutput(filename, Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
1 голос
/ 04 ноября 2011

Для 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 к файлу, а затем загрузить изображение из файла. Таким образом, вы можете сохранить первый файл и использовать его при загрузке изображения.

И для URL Inputstream, чтобы написать файл, посмотрите этот урок Сохраните двоичный файл с URL

0 голосов
/ 11 января 2013

Проверенный фрагмент:

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);
0 голосов
/ 04 ноября 2011

Пожалуйста, просмотрите эту документацию о том, как сохранить кэшированные файлы и эту документацию для общего внутреннего хранения файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...