我的图像是780x585。我正在使用scaleMode = ScaleMode.LETTERBOX将此图像调整为1246.93x935.19。
当用户点击图形并将其拖入图片时,我应该得到图形被丢弃的像素位置。
我通过聆听鼠标按下事件并通过在释放鼠标时使用来自事件的(x,y)坐标调用getPixel来做到这一点。
奇怪的是我获得了像素的值而不是真实的像素值。取而代之的是,我得到了与图像相对应的值,并且没有调整大小。
有没有人知道为什么会这样?
谢谢, 戴夫
答案 0 :(得分:1)
当对组件应用一些视觉变化时(如此处的移动,旋转或拉伸),Flex将应用变换矩阵来仅修改对象的视觉外观。
假设您通过执行image.width * = 2来移动图像。将修改实际图像宽度。如果你做image.matrix.scale(2,1); (这是伪代码),视觉外观将被修改,因此您可以看到调整大小,但实际宽度将保持不变。
我认为应用Letterbox调整大小是使用矩阵变换,所以即使你的图像看起来更大,它的位置和大小仍然是相同的。这就是为什么你和以前一样的原因。
要解决您的问题,您只需将您获得的坐标(使用event.localX或其他任何内容)乘以图像当前缩放比例即可。 如果您已经知道最终大小,则只需执行以下操作:newLocalX = event.localX *(resizedImage.width / originalImage.width);
如果您想知道Matrixes如何运作,请参阅以下信息。