Может кто-нибудь объяснить, пожалуйста, Матрица (мистер Андерсон)? - PullRequest
4 голосов
/ 18 ноября 2011

Я довольно новичок в манипулировании изображениями вручную, поэтому, пожалуйста, потерпите меня.

У меня есть изображение, которое я позволяю пользователю уменьшать / увеличивать и перемещать.

Базовое поведение работает отлично. Однако мне нужно иметь возможность захватывать все, что находится в «области просмотра» (прямоугольник видимой области отсечения), и сохранять его в виде отдельного растрового изображения.

Прежде чем я смогу это сделать, мне нужно выяснить, ГДЕ изображение на самом деле и что отображается. Это оказывается сложнее, чем я мог себе представить.

Моя проблема в том, что документация по матрице абсурдно расплывчата, и я заблудился относительно того, как я могу измерить координаты и размеры моего преобразованного изображения. На мой взгляд, X, Y изображения остаются постоянными даже при уменьшении / увеличении пользователем. Таким образом, даже если он сообщает, что он находится на уровне 0,0, он отображается на (скажем) 100 100. И единственный способ получить эти координаты - сделать довольно уродливые вычисления (опять же ... я, вероятно, не делаю это самым элегантным способом, так как геометрия не моя сильная сторона).

Я надеюсь, что что-то упустил и что есть какой-то способ получить автоматически переведенные координаты и размеры объекта.

в идеальном мире я мог бы назвать (псевдо) myImg.getDisplayedWidth() и myImg.getDisplayedX().

О, и я должен добавить, что это может быть проблемой, которую я сам вызываю, используя центр изображения в качестве точки, из которой нужно расти / сжиматься. Если бы я оставил координату 0,0 по умолчанию в качестве неизменяемой точки, я думаю, что местоположение будет правильным независимо от его размера. Итак ... может быть, ответ на все это состоит в том, чтобы просто выяснить смещение моего центра и применить его к моим переводам?

Вся помощь очень ценится (и люди, которые не произвольно возятся с заголовком моего вопроса, тем более!).

1 Ответ

2 голосов
/ 18 ноября 2011

Матричный метод mapPoints(float[] dst, float[] src) может быть использован для получения ряда переведенных точек с применением перевода Матрицы.Или (немного) с точки зрения неспециалистов, экземпляр класса Matrix содержит не только инструкцию по переводу, но и удобные методы для применения перевода Matrix к ряду точек.

Так что в вашем случае вам просто нужноуглы вашего непереведенного растрового изображения (x, y, width, height) и передайте угловые точки в этот метод, чтобы получить переведенные точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...