Как загрузить растровые изображения и сохранить их на SD-карту без нехватки памяти?

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

Я слышал это ByteArrayOutputStream это плохая идея, потому что она загружает изображение в оперативную память устройства. Вместо этого я, вероятно, должен использовать что-то вроде BufferedInputStream а также FileOutputStreamОднако я не знаю, как я могу изменить растровые изображения перед сохранением их с помощью этого метода.

Спасибо

2 ответа

Решение

Вам не понравится ответ: вы не можете (по крайней мере, не с Android Framework).

Единственный вариант - уменьшить изображение так, чтобы оно поместилось в памяти; и регулярно звонить recycle()а также System.gc() освободить память как можно скорее.

Вы можете создать свое растровое изображение из вашего InputStream с помощью:

Bitmap bm = BitmapFactory.decodeStream(inputStream);

а затем после того, как вы обработали Bitmap и сохранив их, вы должны использовать:

bm.recycle();
bm = null;

избежать OutOfMemoryExceptions,

РЕДАКТИРОВАТЬ:

Для записи в файл:

OutputStream fos=new BufferedOutputStream(new FileOutputStream(filePath));
byte buf[]=new byte[1024];
int len;
while((len=is.read(buf))>0)
    fos.write(buf,0,len);
fos.close();
is.close();
Другие вопросы по тегам