Android, как масштабировать изображение с помощью BitmapFactory Options

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

3 ответа

Решение

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

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

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

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

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

int imageWidth, imageHeight;

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

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

Другие вопросы по тегам