如何使用FigPanZoom正确创建相对于图像的点?

时间:2012-06-02 17:33:30

标签: actionscript-3 flex flex4

我的图像是5000像素乘5000像素。它会定期按比例放大,以适应窗口的不同部分。

我正在创建一个聚焦在图像上不同位置的函数(如地图),然后缩放到我指定的某个比例。

我将我的观点传递给了这个函数(例如新的Point(2000,2500))但是这总是打破,因为它与图像没有特别的关系。

如何在任何给定时间以图像的给定比例制作相对于图像的点?

其他信息:我正在使用此处的指南http://www.adobe.com/devnet/flex/samples/fig_panzoom.html进行平移和缩放功能。

解决:

我的一个陷阱是我正在使用一个可能的bitmapScaleFactor> 1会破坏缩放比例。这是我使用的最终功能。

protected function testFocus(p:Point):void
        {
            var content:ContentRectangle = boardViewer._contentRectangle;
            var panToPoint:PanToPointCommand = new PanToPointCommand(boardViewer, content);
            var scale:Number = boardViewer.bitmapScaleFactor;

            var location = new Point((p.x*scale)+content.x, (p.y*scale)+content.y);             
            var center = new Point(boardViewer.width/2, boardViewer.height/2);

            //Move the point to the center
            panToPoint.fromPoint = location;
            panToPoint.toPoint = center;
            panToPoint.execute();
        }

2 个答案:

答案 0 :(得分:1)

我没有测试过这个,但是如何使用应用于图像的比例因子来改变点坐标。

e.g。

var scaler:Number = 0.5;

image.scaleX = image.scaleY = scaler;

new Point(2000*scaler,2500*scaler);

答案 1 :(得分:0)

您在寻找DisplayObject.mouseX/mouseY吗?但是,这些不会考虑任何轮换。

要考虑轮换,您可以执行类似(未经测试的代码):

var mat:Matrix = image.transform.concatenatedMatrix;
mat.invert();

// now use mat to transform point from 'stage space' to 'image space'
var pImage:Point = mat.transform(new Point(stage.mouseX, stage.mouseY));