Изображение с рисунком под растение в Android

Я пробовал это в течение некоторого времени, я хотел бы создать обои из Bitmap . Скажем, размер обоев – 320×480, а размер исходного изображения – 2048×2048.

Я не уверен, является ли подходящий термин для урожая, но то, что я хотел бы достичь, – это получить большую часть изображения с равным соотношением, как и желаемый размер обоев (320×480).

Поэтому в этом случае я хотел бы получить 2048×1365 или (1365.333 … если быть точным) из исходного Bitmap и масштабировать его до 320×480.

Техника, которую я пробовал:

1) Обрезать битмап сначала на 2048×1365

 bm = Bitmap.createBitmap(bm, xOffset, yOffset, 2048, 1365); 

2) Увеличьте масштаб до 320×480

 bm = Bitmap.createScaledBitmap(bm, 320, 480, false); 

Который вызвал ошибку OutOfMemory.

Есть ли способ достичь этого?

С Уважением,

dezull

Благодаря открытому исходному коду, я нашел ответ из исходного кода Android Gallery здесь по строке 230 😀

 croppedImage = Bitmap.createBitmap(mOutputX, mOutputY, Bitmap.Config.RGB_565); Canvas canvas = new Canvas(croppedImage); Rect srcRect = mCrop.getCropRect(); Rect dstRect = new Rect(0, 0, mOutputX, mOutputY); int dx = (srcRect.width() - dstRect.width()) / 2; int dy = (srcRect.height() - dstRect.height()) / 2; // If the srcRect is too big, use the center part of it. srcRect.inset(Math.max(0, dx), Math.max(0, dy)); // If the dstRect is too big, use the center part of it. dstRect.inset(Math.max(0, -dx), Math.max(0, -dy)); // Draw the cropped bitmap in the center canvas.drawBitmap(mBitmap, srcRect, dstRect, null); 

Я знаю, что это невероятно поздний ответ, но что-то вроде этого может быть:

 public static Bitmap scaleCropToFit(Bitmap original, int targetWidth, int targetHeight){ //Need to scale the image, keeping the aspect ration first int width = original.getWidth(); int height = original.getHeight(); float widthScale = (float) targetWidth / (float) width; float heightScale = (float) targetHeight / (float) height; float scaledWidth; float scaledHeight; int startY = 0; int startX = 0; if (widthScale > heightScale) { scaledWidth = targetWidth; scaledHeight = height * widthScale; //crop height by... startY = (int) ((scaledHeight - targetHeight) / 2); } else { scaledHeight = targetHeight; scaledWidth = width * heightScale; //crop width by.. startX = (int) ((scaledWidth - targetWidth) / 2); } Bitmap scaledBitmap = Bitmap.createScaledBitmap(original, (int) scaledWidth, (int) scaledHeight, true); Bitmap resizedBitmap = Bitmap.createBitmap(scaledBitmap, startX, startY, targetWidth, targetHeight); return resizedBitmap; } 

Вот ответ, который дает вам большую часть пути: как обрезать изображение в андроиде?

Intereting Posts
Временно отключить доступ в Интернет в Android? Вызов приложений Google Map из приложения для Android, чтобы получить направление вращения Перемещайте предметы в полукруге, как бесконечный список Прокрутка анимации в NavigationView Дизайнер дал мне PSD. Теперь, как мне создать макет для Android? Как я могу использовать Android для загрузки файла на основе сеанса / файла cookie с помощью webView? Метод setActionBar (Панель инструментов) в типе Activity не применим для аргументов (Панель инструментов) Как узнать, работает ли Android-приложение на переднем плане? Не удается найти класс MainActivity (импортированный проект) Добавить несколько строк в TextView Как реализовать функции RFID в нашем приложении для Android Написание приложений для Android на C # (Xamarin) Android Как эмулировать поведение @android: id / empty в GridView? Функция Cloud Firebase запускает дважды onUpdate Добавить productFlavor в экспериментальную библиотеку плагинов Android gradle