Как загрузить растровые изображения и сохранить их на SD-карту без исчерпания памяти? - PullRequest
0 голосов
/ 03 августа 2011

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Вам не понравится ответ: вы не можете (по крайней мере, не с помощью платформы Android).

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

1 голос
/ 03 августа 2011

Вы можете создать свое растровое изображение из InputStream, используя:

Bitmap bm = BitmapFactory.decodeStream(inputStream);

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

bm.recycle();
bm = null;

чтобы избежать OutOfMemoryExceptions.

EDIT:

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

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();
...