Я борюсь с ошибками OOM при декодировании изображений.Это сообщение прямо о деньгах, с которыми я имею дело: BitmapFactory OOM сводит меня с ума
Я думаю, что Я ЗНАЮ, что может решить мою проблему, но не уверен, как это сделать.Прямо сейчас, когда я изменяю размер изображения - я получаю растровое изображение примерно так:
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
o2.inDither=false; //Disable Dithering mode
o2.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared
o2.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
o2.inTempStorage=new byte[32 * 1024];
Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(file), null, o2);
И затем мне нужно сохранить его обратно в файл:
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
Как вы видите -Моя цель - получить уменьшенное изображение в хранилище.
Прямо сейчас - когда я работаю с большими растровыми изображениями - я загружаю большой файл в память, который увеличивает размер кучи, а затем при следующей попытке - я получаю исключение OOM, потому что в собственной куче недостаточно памяти.
Итак, я хотел бы получить поток из BitmapFactory и каким-то образом передать его в FileStream для хранения.Это позволило бы устранить проблему с кучей виртуальных машин, если я хочу большие образы.
Кто-нибудь знает, как?