Фон
Я пытаюсь создать эффект горизонтальной прокрутки для любого файла изображения в приложении для живых обоев.
Для этого мне нужно работать в соответствии с этими правилами, я думаю:
- Ввод - это файл изображения любого разрешения
- Я должен масштабировать / обрезать, чтобы высота имела определенное значение.
- Ширина должна бытьпо крайней мере, определенного значения
- Выходное растровое изображение должно быть до определенной ширины, потому что я не хочу создавать слишком большое растровое изображение, занимающее огромный объем памяти
- Сохранять соотношение стороннесмотря ни на что.
Проблема
Я испытываю трудности с поиском правильных функций и параметров, чтобы заставить его генерировать правильную ширину и высоту выходного растрового изображения.
То, что я пробовал
Я пытался возиться с различными преобразованиями (пример: centerCropTransform, fitCenterTransform), но ни один из них не достиг того, чего я хотел, поэтому я думаю, что никто не сможет работать, если я не сделаю сомСпециальная математика на моей стороне, прежде чем решить, что делать с Glide.
В настоящее время я делаю что-то вроде этого:
val result = Glide.with(context).asBitmap()
.load(imageFile)
.apply(RequestOptions.noTransformation()
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE))
.submit(reqWidth, reqHeight).get()
Это работает, как и производит (по крайней мере, в соответствии с моимтесты) растровое изображение, по крайней мере, того размера, который я запрашиваю.Однако это означает, что у меня есть дополнительные пиксели, которые на самом деле не нужны для высоты.Это также не защищает меня от создания слишком большого растрового изображения.
Но я думаю, может быть, было бы проще попросить Glide использовать различные методы для вышеуказанной цели, а затем принять решение о возможных выходных разрешениях, которыеЛучше всего использовать.
Вопросы
Можно ли получить выходное разрешение до фактического декодирования и сохранения в растровое изображение и только позже решить, какой метод следует использовать?используется?
Возможно, есть лучший вариант, который я должен рассмотреть?Может быть, сделать расчет на моей стороне, а затем решить, что делать с Glide?Если да, то как?