Android BitmapFactory decodeStream()

У меня есть вопрос, на который я, кажется, нигде не нахожу ответа. Это строки кода:

final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

    BitmapFactory.decodeStream(is, null, options);

на самом деле означает, что этот файл загружается? Документы Android говорят что-то вроде этого:

декодировать с помощью inJustDecodeBounds=true для проверки размеров

и ли:

options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    BitmapFactory.decodeStream(is, null, options);

означает, что он на самом деле загрузит файл меньшего размера (не загружается в исходном размере, а затем копируется в растровое изображение меньшего размера).

Наглядный пример: у меня есть несколько URL-адресов, которые указывают на множество изображений размером 2000 x 1500. При декодировании этих файлов и загрузке их в растровые изображения нужно ли мне иметь достаточно памяти для загрузки файла с полным разрешением (2000 x 1500), если мне нужны только миниатюры (200 x 150)?


person DoruAdryan    schedule 18.04.2013    source источник
comment
Я думаю, вам нужно загрузить полное разрешение (2000 x 1500), если сервер не предоставляет какие-либо параметры уменьшения размера.   -  person Abx    schedule 18.04.2013


Ответы (2)


Я знаю, что другой ответ уже был принят как правильный, но для ясности...

Эта строка options.inJustDecodeBounds = true; означает, что вызов BitmapFactory.decodeStream(is, null, options); не получает информацию о растровом изображении, но получает информацию о границах и MimeType.

Затем вы можете использовать эти возвращенные значения, outWidth, outHeight и outMimeType, чтобы получить «пересчитанную» версию растровых данных, установив options.inJustDecodeBounds = false; и установив размер выборки в заданное соотношение, определяемое вашими желаемыми выходными размерами options. inSampleSize = [int].

Дополнительную информацию см. на этой очень информативной странице: Эффективная загрузка больших растровых изображений

person droppin_science    schedule 16.09.2013

Действительно, похоже, что файл загружается, и часть эффективности возникает там, где растровое изображение, загружаемое в память, является меньшим (тот, который декодируется с параметрами inSampleSize).

person DoruAdryan    schedule 29.04.2013