Android BitmapFactory через Интернет - PullRequest
0 голосов
/ 31 октября 2011

Я загружаю изображения из интернета, а затем отображаю их в масштабе на экране. Идея состоит в том, чтобы использовать inSampleSize, чтобы я мог масштабировать большие изображения при распаковке и предотвратить исключение OutOfMemory. Но чтобы найти inSampleSize, мне нужно знать разрешение изображения. Его можно получить с помощью опции inJustDecodeBounds.

Проблема в том, что я не могу передать ему поток и напрямую загрузить изображение из Интернета, потому что оно будет загружено дважды (сначала для получения размера, затем для получения масштабированного растрового изображения). Я не могу загрузить изображение и сохранить его в оперативной памяти, потому что размер изображения может быть большим. Единственное решение - это загрузить изображение на SD-карту / во внутреннюю память и прочитать его оттуда, но когда у пользователя не останется свободного места, произойдут плохие вещи.

Вопрос в том, есть ли способ сделать это, не полагаясь на память и оперативную память, которая не требует загрузки образа дважды? Или, может быть, BitmapFactory загружает не целое изображение при использовании inJustDecodeBounds, а только заголовки?

Спасибо

1 Ответ

1 голос
/ 31 октября 2011

Если вы загружаете PNG, GIF или JPG, должна быть возможность прочитать заголовки файлов, чтобы определить ширину и высоту, что должно означать, что вам не нужно загружать весь файл.

В этом сообщении есть некоторый код C # для чтения ширины и высоты из заголовков для указанного выше формата, который можно перенести на Java для использования в Android.

...