Создание масштабированного растрового изображения с помощью 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);