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

Вы можете использовать

 Bitmap dst = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight); 

Из документации:

Возвращает неизменяемое растровое изображение из указанного подмножества исходного растрового изображения. Новое растровое изображение может быть тем же объектом, что и источник, или может быть сделана копия. Он инициализируется с той же плотностью, что и исходное растровое изображение.

Здесь вы можете найти документацию

Несколько расширив ответ выше

Так как в некоторых ситуациях вы можете получить исключение или не ожидаемый результат , просто используя Bitmap.createBitmap (), как и определение:

Java.lang.IllegalArgumentException: ширина x + должна быть <= bitmap.width ()

Heres – это небольшая функция, которая делает урожай и обрабатывает некоторые из обычаев.

Редактировать: обновлено в соответствии с требованием дроидстра.

 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; } 

Я провел несколько тестов с некоторыми изображениями разных разрешений и размеров, и он работает так, как ожидалось.

Его также можно использовать в других ситуациях, например, когда вы пытаетесь создать «идеальный» круглый образ и должны проходить квадратное растровое изображение и т. Д.

Установить фиксированную высоту изображения, ширину и задать два свойства для просмотра изображений

 android:adjustViewBounds="true" android:scaleType="centerCrop" 

сделанный

Intereting Posts
Android Spinner Adapter Настройка для поворота Android L + Nexus 5: java.io.FileNotFoundException: open failed: EACCES (Permission denied) Что я должен использовать для повышения производительности, с девятью патчами или ресурсом xml? Просмотр MATCH_PARENT в представлении WRAP_CONTENT Как использовать SharedPreferences для сохранения URI или любого хранилища? Ионный 2: Как обращаться с кнопкой возврата оборудования, которая проверяет подтверждение выхода в приложении Android. Возможно ли создать пользовательскую библиотеку для использования в нескольких приложениях? Как я могу зацикливать ключи HashTable в Android? Переименование документа Google Диска с использованием платформы доступа к хранилищу Android приводит к ошибкам разрешения Звуковые сигналы медиа-плеера Android забиваются / заикаются только на более новых устройствах Задержка при использовании android.speech.SpeechRecognizer в DICTATION_MODE Минимизировать задержку Android GLSurfaceView Android-приложение перезапускается после сбоя / силы SecurityException при попытке добавить учетную запись Слушатель событий на клавиатуре в Android