Intereting Posts
Используйте SyncAdapter для синхронизации с * локальными * gmail и facebook приложениями. Индексирование Google App не работает над полем описания, но работает над полем заголовка Вызов методов активности из фрагмента OnStart новой операции вызывается перед onStop родительского Почему дополнительный фрагмент FrameLayout создан для фрагментов? Ошибка сборки Android Studio 1.0RC4 Gradle Как получить ссылку Webview iframe для запуска браузера? Android – использование метода из службы в действии? BitmapFactory.decodeStream возвращает null без исключения Уменьшите внутреннюю логарифмическую логику ORMlite или отключите ее. Android Browser.BOOKMARKS_URI не работает на всех устройствах. Как узнать правильный uri для данного устройства? Проанализировать логин через Facebook api 4.0 в студии android Как получить путь к папке активов Android в пакете приложений Как программно добавлять сертификаты в доверительный магазин и использовать их для проверки подлинности сервера Как импортировать закрытый ключ RSA, который генерируется openssl, в AndroidKeyStore

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

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

Мой код:

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

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

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

Если у вас уже есть исходное растровое изображение в памяти, вам не нужно делать весь процесс 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);