Intereting Posts
Как обрабатывать несколько таймеров обратного отсчета в RecyclerView? Как получить текущий фрагмент, отображаемый на определенной вкладке в viewpager? Назначить статический IP-адрес для Wi-Fi сети на Android 3.x и 4.x Android: кнопка Overlay onClick никогда не будет вызвана Android: Получение URI файла из URI контента? Геоинформация Android из местоположения / местоположения Как объединить данные с помощью Android Volley Android SDK / Android.bat не находит файл SWT.jar Вызванное: java.lang.NullPointerException: попытка вызвать виртуальный метод 'void … по ссылке нулевого объекта Сортировка Android strings.xml в алфавитном порядке Почему иногда сохраняется сохранение Hashtable объектов, не являющихся объектами в onSaveInstanceState ()? Поддержка разделенного экрана в Android N + только на планшетах Попросите разблокировать шаблон – Android Android InstantRun – Norton Security находит трояна Получение координат представления относительно родительского ScrollView

Создание масштабированного растрового изображения с помощью createScaledBitmap в Android

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

Мой код:

Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, 960, 960, false); 

Я хочу, чтобы у изображения было MAX 960. Как мне это сделать? Установка ширины в null не компилируется. Это, наверное, просто, но я не могу обернуть вокруг себя. благодаря

Если у вас уже есть исходное растровое изображение в памяти, вам не нужно делать весь процесс inJustDecodeBounds , inSampleSize и т. Д. Вам просто нужно выяснить, какое отношение использовать и масштабировать.

 final int maxSize = 960; int outWidth; int outHeight; int inWidth = myBitmap.getWidth(); int inHeight = myBitmap.getHeight(); if(inWidth > inHeight){ outWidth = maxSize; outHeight = (inHeight * maxSize) / inWidth; } else { outHeight = maxSize; outWidth = (inWidth * maxSize) / inHeight; } Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, outWidth, outHeight, false); 

Если для этого изображения используется только масштабированная версия, вам лучше использовать ответ Тобиэля, чтобы свести к минимуму использование памяти.

Ваше изображение квадратное, потому что вы устанавливаете width = 960 и height = 960 .

Вам нужно создать метод, в котором вы передадите размер изображения, который вы хотите: http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

В коде это выглядит так:

 public static Bitmap lessResolution (String filePath, int width, int height) { int reqHeight = height; int reqWidth = width; BitmapFactory.Options options = new BitmapFactory.Options(); // First decode with inJustDecodeBounds=true to check dimensions options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); } private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { // Calculate ratios of height and width to requested height and width final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); // Choose the smallest ratio as inSampleSize value, this will guarantee // a final image with both dimensions larger than or equal to the // requested height and width. inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } 
 bmpimg = Bitmap.createScaledBitmap(srcimg, 100, 50, true);