Обработка больших Битовых массивов

У меня есть набор URL изображения. Я должен загрузить эти изображения и отобразить их в моем приложении один за другим. Я сохраняю образы в использовании Набора SoftReferences и также на Sdcard, чтобы избежать перевыборок и улучшить пользовательский опыт.

Проблема, я ничего не знаю о размере битовых массивов. И как оказалось, я получаю OutOfMemoryExceptions эпизодически, когда я использую BitmapFactory.decodeStream(InputStream) метод. Так, я принял решение субдискретизировать использование изображений Опции BitmapFactory (образец size=2). Это дало лучший вывод: никакой OOMs, но это влияет на качество меньших изображений.

Как я должен обработать такие случаи? Существует ли способ выборочно субдискретизировать только изображения высокого разрешения?

31
задан tshepang 8 February 2014 в 18:57
поделиться

1 ответ

There is an option in BitmapFactory.Options class (one I overlooked) named inJustDecodeBounds, javadoc of which reads:

If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.

I used it to find out the actual size of the Bitmap and then chose to down sample it using inSampleSize option. This at least avoids any OOM errors while decoding the file.

Reference:
1. Handling larger Bitmaps
2. How do I get Bitmap info before I decode

55
ответ дан 27 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: