У меня есть растровые изображения, которые представляют собой квадраты или прямоугольники. Я выбираю самую короткую сторону и делаю что-то вроде этого:
int value = 0;
if (bitmap.getHeight() <= bitmap.getWidth()) {
value = bitmap.getHeight();
} else {
value = bitmap.getWidth();
}
Bitmap finalBitmap = null;
finalBitmap = Bitmap.createBitmap(bitmap, 0, 0, value, value);
Затем я масштабирую его до битмапа 144 x 144, используя это:
Bitmap lastBitmap = null;
lastBitmap = Bitmap.createScaledBitmap(finalBitmap, 144, 144, true);
Проблема в том, что он обрезает верхний левый угол оригинального растрового изображения. У кого-нибудь есть код для обрезки центра растрового изображения?
100x1000
изображение, вы получаете100x550
изображение обратно .Хотя большинство из приведенных выше ответов обеспечивают способ сделать это, уже есть встроенный способ сделать это, и это 1 строка кода (
ThumbnailUtils.extractThumbnail()
)Если вы хотите, чтобы растровый объект был переработан, вы можете передать параметры, которые делают это так:
От: ThumbnailUtils Документация
Иногда я получал ошибки памяти при использовании принятого ответа, и использование ThumbnailUtils решало эти проблемы для меня. Плюс, это намного чище и более многоразово.
источник
Рассматривали ли вы сделать это из
layout.xml
? Вы можете установить для вашегоImageView
на ScaleType кandroid:scaleType="centerCrop"
и установить размеры изображения вImageView
внутриlayout.xml
.источник
Вы можете использовать следующий код, который может решить вашу проблему.
Вышеупомянутый метод делает postScalling изображения перед кадрированием, так что вы можете получить лучший результат с кадрированным изображением без ошибки OOM.
Для более подробной информации вы можете обратиться к этому блогу
источник
Вот более полный фрагмент кода , который обнажается центра в [растрового изображения] произвольных размеров и весов результат вашего желаемого [IMAGE_SIZE] . Таким образом, вы всегда получите масштабированный квадрат [croppedBitmap] центра изображения с фиксированным размером. идеально подходит для миниатюр и тому подобное.
Это более полная комбинация других решений.
источник
Наверное, самое простое решение на данный момент:
импорт:
источник
Чтобы исправить решение @willsteel:
источник
источник
источник