【发布时间】:2011-04-14 18:42:53
【问题描述】:
我在 Flex 中遇到矩阵变换问题。
我有一个 Flex Canvas,里面只有一个图像,就像这样。
<mx:Canvas>
<mx:Image id="img" source="/some/Url" />
</mx:Canvas>
对于这张图片,我使用如下代码应用缩放/旋转变换:
private function _rotateAndZoomImage(zoom:Number, angle:Number):void{
var radians:Number = angle * (Math.PI / 180.0);
var offsetWidth:Number = ( img.contentWidth/2.0 );
var offsetHeight:Number = ( img.contentHeight/2.0 );
var matrix:Matrix = new Matrix();
matrix.translate(-offsetWidth, -offsetHeight);
matrix.rotate(radians);
//Do the zoom
matrix.scale (zoom/100, zoom/100);
matrix.translate(+offsetWidth, +offsetHeight);
img.transform.matrix = matrix;
}
这一切都有效。但。图像是可拖动的。用户可以将其移动到画布内作为其父级的任何位置。
一旦图像被移动并应用了变换图像被“捕捉”回到原来的 0,0(画布左上角)位置被转换并在之后被留在那里 - 不是用户期望的地方。
在一天中大部分时间都在搞砸这个问题之后,我仍然无法弄清楚它到底为什么会这样做。有人吗?
编辑:请注意,在上述代码中没有两次调用 .translate() 时也会发生同样的情况。因此,以下代码还会在图像移动后将图像捕捉回画布的 0,0:
private function _rotateAndZoomImage(zoom:Number, angle:Number):void{
var radians:Number = angle * (Math.PI / 180.0);
var matrix:Matrix = new Matrix();
matrix.rotate(radians);
matrix.scale (zoom/100, zoom/100);
img.transform.matrix = matrix;
}
杰克
【问题讨论】:
标签: apache-flex matrix transform