У меня есть несколько изображений определенного размера, которые мне нужно поместить в ImageView.
Проблема
Я могу использовать обрезку по центру, но часто отображаемые изображения обрезают важные части изображений.
Я хочу иметь возможность указать ImageView попробовать лучше всего показывать определенную область (точку/прямоугольник), обрезая остальную часть, но не растягивая, а просто подгоняя ее по ширине и высоте.
Итак, предположим, что ImageView имеет квадратную форму. (соотношение сторон 1:1), а изображение, из которого нужно обрезать, представляет собой прямоугольник, это означает, что я смогу обрезать не только из центра или по бокам, но и где-то посередине:

Что я нашел
Похоже, существует множество репозиториев и фрагментов Github, которые предлагают решение, похожее на эту проблему:
- https:// github.com/cesards/SuperImageView
- https://github.com/omgnuts/JCropImageView
- https://github.com/yqritc/ Android-ScalableImageView
- https://gist.github.com/sromku/73254681b933406b701b
- https://github.com/NicolasDuponchel/ScalableImageView< /li>
https://gist.github.com/arriolac/3843346
Я хочу указать, где именно в растровом изображении находится важная часть, которую нужно попытаться сохранить, а затем вписаться оттуда и обрезать остальную часть .
Я не против либо расширить ImageView и использовать для этого его матрицу, либо получить новое растровое изображение из исходного (в том числе с помощью Glide, например). Также было бы полезно узнать об обоих типах решений.
Возможный способ понять это и сделать плохое решение — это создать цикл, который начинается с важной точки и увеличивает свой размер по ширине и высоте, чтобы он соответствовал соотношению сторон ImageView, и на каждой итерации он будет увеличивать ширину на некоторое число и высоту на некоторое число, пока не достигнет краев. Это правильно только теоретически, потому что практически при этом будут потеряны некоторые пиксели из-за округления вычислений, а также это неэффективно, поскольку вместо этого используется цикл, в котором вместо этого можно было бы использовать прямое вычисление.
Вопрос
Есть ли в этом вообще смысл? Возможно ли реализовать такое?
Если да, не могли бы вы показать код, как это сделать?
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-somethin
Мобильная версия