Я хочу декодировать изображение с SD-карты с помощью BitmapFactory.decodeFile(путь, параметры).
Я также хочу, чтобы изображения размером более 2048x2048 пикселей уменьшались до 2048x2048 (поддерживая пропорции).
Я мог бы сделать это вручную после получения растрового изображения, но для этого потребуется выделить большое количество байтов в дополнение к уже выделенным.
Как мне настроить объект BitmapFactory.Options, чтобы получить этот эффект?
Благодаря
Android, как масштабировать изображение с помощью параметров BitmapFactory
Ответ 1
Используйте BitmapFactory.Options.inSampleSize, когда вы сначала загружаете свое изображение, чтобы получить размер как можно ближе к вашему целевому размеру, затем используйте Bitmap.createScaledBitmap
для масштабирования до нужного размера.
Здесь есть код для этого в этом ответе.
Ответ 2
Начните с установки inJustDecodeBounds
на true
в Options
, это даст вам размер изображения без загрузки каких-либо данных изображения.
Если размер изображения меньше, чем ваш максимальный размер, просто загрузите его как обычно.
Если, с другой стороны, он слишком велик, используйте inSampleSize
для чтения меньшего растрового изображения.
Примечание. Я не думаю, что декодирование делает какую-либо фильтрацию при использовании inSampleSize, поэтому вы можете потерять некоторые детали, но по мере того, как размер изображения такой большой (2048 пикселей), я не думаю, что это вызовет какие-либо проблемы.
Ответ 3
Вы можете попробовать что-то вроде этого:
int imageWidth, imageHeight;
Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
imageWidth, imageHeight, false);
Здесь вы можете добавить свою собственную ширину и высоту. bitmapPicture
является объектом Bitmap
.
Сообщите мне, если это поможет вам.