Обрезать изображение на квадрат-Android
Как я могу вырезать прямоугольное изображение (600 x 300) слева и справа, чтобы вписаться в квадратное изображение ? Я не хочу изменять размер изображения, я просто хочу обрезать его, чтобы быть 300 x 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);
3 ответов
можно использовать
Bitmap dst = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight);
из документации:
возвращает неизменяемое растровое изображение из указанного подмножества источника растровый. Новый растровый рисунок может быть тем же объектом, что и исходный, или копией были сделаны. Он инициализируется с той же плотностью, что и исходное растровое изображение.
здесь вы можете найти документацию
расширение немного на ответ выше
Так как в некоторых ситуациях вы можете получить исключение или не ожидаемый результат, просто используя растровое изображение.createBitmap(), как следующие:
java.ленг.IllegalArgumentException: ширина x + должна быть
Heres-небольшая функция, которая выполняет обрезку и обрабатывает некоторые общие случаи.
Edit: обновлено согласно заявлению 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;
}
Я сделал несколько тестов с некоторыми изображениями разных разрешений и размеров, и он работает так, как ожидалось.
он также может использоваться в других ситуациях, например, когда вы пытаетесь сделать "идеально" круглое изображение и должны передать квадратное растровое изображение и т. д.
установите фиксированную высоту изображения, ширину и установите два свойства в image view
android:adjustViewBounds="true"
android:scaleType="centerCrop"
сделал