Подтвердить что ты не робот

Обрезать изображение на квадрат - 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);
4b9b3361

Ответ 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"

сделать