Как загрузить растровые изображения и сохранить их на 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();