Обрезать изображение на квадрат - Android
Как я могу вырезать прямоугольное изображение (600 x 300) слева и справа, чтобы поместиться в квадрат ImageView? Я не хочу изменять размер изображения, я просто хочу обрезать его, чтобы он составлял 300 х 300.
[РЕШЕНИЕ]
Как сказал @blackbelt
Bitmap cropImg = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight);
отлично подходит для обрезки изображений. Итак, как вы можете автоматически обрезать изображения разных размеров. Я создаю для этого простой код:
// From drawable
Bitmap src= BitmapFactory.decodeResource(context.getResources(), R.drawable.image);
// From URL
Bitmap src = null;
try {
String URL = "http://www.example.com/image.jpg";
InputStream in = new java.net.URL(URL).openStream();
src = BitmapFactory.decodeStream(in);
} catch (Exception e) {
e.printStackTrace();
}
int width = src.getWidth();
int height = src.getHeight();
int crop = (width - height) / 2;
Bitmap cropImg = Bitmap.createBitmap(src, crop, 0, height, height);
ImageView.setImageBitmap(cropImg);
Ответы
Ответ 1
Вы можете использовать
Bitmap dst = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight);
из документации:
Возвращает неизменяемое растровое изображение из указанного подмножества источника битовая карта. Новый растровый рисунок может быть тем же объектом, что и источник, или копия может были сделаны. Он инициализируется с той же плотностью, что и оригинальное растровое изображение.
Здесь вы можете найти документацию
Ответ 2
Развернуть немного над ответом выше
Так как в некоторых ситуациях вы можете получить исключение или не ожидаемый результат, просто используя Bitmap.createBitmap(), например, следующее:
java.lang.IllegalArgumentException: ширина x + должна быть <= bitmap.width()
Heres - это небольшая функция, которая делает урожай и обрабатывает некоторые из обычаев.
Изменить: обновлено соответствующим требованиям droidster.
public static Bitmap cropToSquare(Bitmap bitmap){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = (height > width) ? width : height;
int newHeight = (height > width)? height - ( height - width) : height;
int cropW = (width - height) / 2;
cropW = (cropW < 0)? 0: cropW;
int cropH = (height - width) / 2;
cropH = (cropH < 0)? 0: cropH;
Bitmap cropImg = Bitmap.createBitmap(bitmap, cropW, cropH, newWidth, newHeight);
return cropImg;
}
Я провел несколько тестов с некоторыми изображениями разных разрешений и размеров, и он работает как ожидалось.
Его также можно использовать в других ситуациях, например, когда вы пытаетесь создать "идеальное" круглое изображение и должны передавать квадратное растровое изображение и т.д.
Ответ 3
установить фиксированную высоту изображения, ширину и задать два свойства для представления изображений
android:adjustViewBounds="true"
android:scaleType="centerCrop"
сделать