Используя матрицу ImageView или прямую обрезку растрового изображения, как мне использовать что-то вроде обрезки по центAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Используя матрицу ImageView или прямую обрезку растрового изображения, как мне использовать что-то вроде обрезки по цент

Сообщение Anonymous »

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

Что я нашел
Похоже, существует множество репозиториев и фрагментов Github, которые предлагают решение, похожее на эту проблему: Однако каждый из них поддерживает только обрезку до краев/углов.
Я хочу указать, где именно в растровом изображении находится важная часть, которую нужно попытаться сохранить, а затем вписаться оттуда и обрезать остальную часть .
Я не против либо расширить ImageView и использовать для этого его матрицу, либо получить новое растровое изображение из исходного (в том числе с помощью Glide, например). Также было бы полезно узнать об обоих типах решений.
Возможный способ понять это и сделать плохое решение — это создать цикл, который начинается с важной точки и увеличивает свой размер по ширине и высоте, чтобы он соответствовал соотношению сторон ImageView, и на каждой итерации он будет увеличивать ширину на некоторое число и высоту на некоторое число, пока не достигнет краев. Это правильно только теоретически, потому что практически при этом будут потеряны некоторые пиксели из-за округления вычислений, а также это неэффективно, поскольку вместо этого используется цикл, в котором вместо этого можно было бы использовать прямое вычисление.
Вопрос
Есть ли в этом вообще смысл? Возможно ли реализовать такое?
Если да, не могли бы вы показать код, как это сделать?

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-somethin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»