2012-06-02 3 views
0

J'ai une image de 5000 pixels par 5000 pixels. Il est mis à l'échelle régulièrement pour adapter différentes parties de l'image dans la fenêtre.Comment créer correctement un point par rapport à une image en utilisant FigPanZoom?

Je crée une fonction qui se concentre sur différents endroits de l'image (comme une carte), puis zoome sur une certaine échelle que je spécifie.

Je passe mon point dans cette fonction (new Point (2000,2500) par exemple)) mais cela casse toujours car ce n'est pas relatif à l'image en particulier.

Comment est-ce que je peux faire le Point par rapport à l'image à l'échelle donnée de l'image à un moment donné?

Informations supplémentaires: J'utilise le guide ici http://www.adobe.com/devnet/flex/samples/fig_panzoom.html pour les fonctionnalités de panoramique et de zoom.

Résolu:

Un de mes pièges était que je travaillais avec un bitmapScaleFactor possible> 1 qui altérerait la mise à l'échelle. C'était la dernière fonction qui a fonctionné pour mon usage.

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

Je ne suis pas sûr que je comprends comment cette fonction est en utilisant le point de l'envoyer. Peut-être que vous devriez partager le code derrière votre fonction. – JeffryHouser

+0

Tout ce qui arrive est qu'il prend le point et simule un clic de souris à ce point sur l'image. Dans ma question, les coordonnées du point (2000,5000) représentent le pixel x et y dans l'image, pas le stade. – buddyp450

+0

Sans connaître précisément la hiérarchie de DisplayObject, il est difficile de dire quelle serait la meilleure approche, mais vous pouvez consulter l'article: http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7dca.html# WS5b3ccc516d4fbf351e63e3d118a9b90204-7dc5 qui parle de traduire des espaces de coordonnées. Cela pourrait vous orienter dans la bonne direction. – martineno

Répondre

1

Je n'ai pas testé cela, mais que diriez-vous d'utiliser le facteur d'échelle qui est appliqué à l'image pour modifier les coordonnées de point.

par exemple.

var scaler:Number = 0.5; 

image.scaleX = image.scaleY = scaler; 

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

Le problème avec cette méthode est que ce n'est pas seulement par rapport à l'échelle. J'ai besoin du point réel dans l'image car l'image pivote également, de sorte que le point (100, 200) de l'image peut être à l'emplacement (50, 200) ou (200, 50) pour une instance particulière. Donc, même si cela peut me donner le point correct par rapport à l'échelle, cela ne s'applique que si l'image est ancrée à (0,0). – buddyp450

+0

J'ai fait une combinaison de ceci et du commentaire de Martin sur l'utilisation de ce que j'avais déjà que je vais ajouter à l'OP. Merci. – buddyp450

0

Vous cherchez DisplayObject.mouseX /mouseY? Cependant, ils ne prennent aucune rotation en compte.

Pour prendre en compte la rotation, vous pouvez faire quelque chose comme (code non testé):

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)); 
Questions connexes