2012-06-02 2 views
0

나는 5000 픽셀 x 5000 픽셀의 이미지를 가지고있다. 이미지의 다른 부분을 창에 맞추기 위해 규칙적으로 위아래로 확대됩니다.FigPanZoom을 사용하여 이미지를 기준으로 포인트를 올바르게 작성하는 방법은 무엇입니까?

나는 (지도와 같은) 이미지의 다른 장소에 집중하고 내가 지정한 특정 축척으로 확대하는 기능을 만들고있다.

필자는이 기능에 포인트를 전달합니다 (예 : new 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(); 
     } 
+0

나는이 기능을 사용하면 보내 포인트를 사용하는 방법을 이해 모르겠어요. 아마도 함수 뒤에있는 코드를 공유해야 할 것입니다. – JeffryHouser

+0

그 일은 포인트를 취하고 이미지의 해당 지점에서 마우스 클릭을 시뮬레이션하는 것입니다. 내 질문에, 포인트의 좌표 (2000,5000)는 픽셀 x와 y를 이미지로 나타냅니다. 스테이지는 아닙니다. – buddyp450

+0

DisplayObject 계층 구조를 정확하게 알지 못해서 가장 좋은 방법이 무엇인지 말할 수는 없지만 http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7dca.html#을 참조하십시오. 좌표 공간의 변환에 대해 말하는 WS5b3ccc516d4fbf351e63e3d118a9b90204-7dc5. 그것은 올바른 방향으로 당신을 가리킬 수도 있습니다. – martineno

답변

1

필자는 이것을 테스트하지 않았지만 이미지에 적용되는 축척 계수를 사용하여 점 좌표를 변경하는 방법에 대해 설명합니다.

var scaler:Number = 0.5; 

image.scaleX = image.scaleY = scaler; 

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

이 방법의 문제점은 스케일에 비례하지 않는다는 것입니다. 이미지의 실제 점은 이미지가 주변을 따라 움직이기 때문에 이미지의 점 (100,200)은 특정 인스턴스의 위치 (50,200) 또는 (200, 50)에있을 수 있습니다. 이렇게하면 스케일에 상대적인 정확한 지점을 얻을 수 있지만 이미지가 (0,0)에 도킹 된 경우에만 적용됩니다. – buddyp450

+0

나는 이것에 대해 martineno의 의견을 조합하여 이미 내가 OP에 추가 할 내용을 활용하는 것에 대해 언급했다. 감사. – buddyp450

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)); 
관련 문제