2014-02-13 7 views
0

У меня есть изображение 780x585. Я изменяю размер изображения до 1246.93x935.19 с помощью scaleMode = ScaleMode.LETTERBOX.Функция Flex Mobile GetPixel с измененным размером изображения получает пиксель, как если бы изображение имело свой первоначальный размер

Когда пользователь нажимает на графику и перетаскивает ее в изображение, я должен получить положение пикселя, в котором была отброшена графика.

Я делаю это, слушая событие mouse up и вызываю getPixel с координатами (x, y), исходящими из события при отпускании мыши.

Странно, что я получаю значение пикселя, но не реальное. Вместо этого я получаю значение, соответствующее изображению, с его нормальным размером без изменения размера.

Кто-нибудь знает, почему это происходит?

Спасибо, Dave

ответ

1

При применении некоторых визуальных изменений в качестве компонента (например, перемещение, вращение или растяжение, как здесь), Flex будет применять матрицу transormation только для изменения внешнего вида объекта.

Предположим, вы перемещаете изображение, выполняя image.width * = 2; фактическая ширина изображения будет изменена. Если вы делаете image.matrix.scale (2, 1); (это псевдокод), внешний вид будет изменен, поэтому вы можете увидеть изменение размера, но фактическая ширина останется прежней.

Я думаю, что применение изменения размера почтового ящика использует матричное преобразование, поэтому даже если ваше изображение больше, его положение и размер остаются прежними. Вот почему вы получаете ту же позицию, что и раньше.

Чтобы решить вашу проблему, вам просто нужно умножить координаты, которые вы получаете (с помощью event.localX или что-то еще) на текущее масштабирование изображения, и это должно быть так. Если вы уже знаете конечный размер, вам просто нужно сделать что-то вроде: newLocalX = event.localX * (resizedImage.width/originalImage.width);

Вот некоторая информация, если вы хотите знать, как работает Matrixes.