Android, как масштабировать изображение с помощью BitmapFactory Options - PullRequest
18 голосов
/ 20 февраля 2012

Я хочу декодировать изображение с SD-карты с помощью BitmapFactory.decodeFile (path, options).
Я также хочу, чтобы изображения размером более 2048x2048 пикселей были уменьшены до максимально 2048x2048 (с сохранением пропорций).
Я мог бы сделать это вручную после получения растрового изображения, но для этого потребовалось бы выделить большое количество байтов в дополнение к уже выделенным.
Как мне настроить объект BitmapFactory.Options, чтобы получить этот эффект?
Спасибо

Ответы [ 3 ]

10 голосов
/ 20 февраля 2012

Используйте BitmapFactory.Options.inSampleSize при первой загрузке изображения, чтобы получить размер, максимально приближенный к вашему целевому размеру, затем используйте Bitmap.createScaledBitmap для масштабирования до нужного размера.

Есть код для этого в этом ответе .

5 голосов
/ 20 февраля 2012

Начните с установки inJustDecodeBounds на true в вашем Options, это даст вам размер изображения без загрузки каких-либо данных изображения.
Если размер изображения меньше вашего максимального размера, просто загрузите его как обычно.
Если, с другой стороны, он слишком большой, используйте inSampleSize, чтобы прочитать меньший битовый массив.

Примечание: Я не думаю, что декодирование выполняет какую-либо фильтрацию при использовании inSampleSize, так что вы можете потерять некоторые детали, но так как размер вашего изображения очень большой (2048 px), я не думаю, это вызовет какие-либо проблемы.

3 голосов
/ 20 февраля 2012

Вы можете попробовать что-то вроде этого:

int imageWidth, imageHeight;

Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
                        imageWidth, imageHeight, false);

Здесь вы можете добавить свои собственные ширину и высоту. bitmapPicture является объектом Bitmap. Дайте мне знать, если это вам чем-то поможет.

...