flex déplacement intelligent sur une image agrandie

Quand vous visionnez une image qui dépasse de l'espace de l'écran, il vous faut utiliser les barres de défilement pour vous déplacer sur l'image, il existe aussi la solution d'automatiser ce déplacement en fonction de la position du curseur (evt.stageX).
Voiçi donc un exemple de cette fonction qui utilise l'évènement MOUSE_MOVE.
Cette fonction est assez facile à mettre en oeuvre avec quelques calculs, il suffit de connaitre la taille de l'image et de l'espace de travail, le mieux étant de se mettre en plein écran.

Remarque 1:
Nous récupérons la taille de m'image avec les méthodes contentWidth et contentHeight, il est important de récupérer ces méthode une fois le chargement de l'image terminée (Event.COMPLETE) sinon ecla ne fonctionne pas.
Remarque 2:
Si vous travaillez en plein écran dans ce cas il faut récupérer la résolution de l'écran avec Capabilities.screenResolutionX ,
Remarque 3:
Ce code fonctionnne bien en utilisation normale.

Le code source:
http://www.progs.fr/exemple/08101202/code/index.html

Démonstration:
http://www.progs.fr/exemple/08101202/dean.html




Le mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
viewSourceURL="source/index.html"
applicationComplete="init()"
>
<mx:Script source="test.as" />
</mx:Application>

Le fichier test.as
import mx.controls.Image;
private var im:Image;

private var largeurIm:int;
private var hauteurIm:int;

private var largeurEcran:int;
private var hauteurEcran:int;

private var posMaxPleinEcranX:int;
private var posMaxPleinEcranY:int;

private function init():void{
im = new Image();
im.source="photo.JPG";
im.addEventListener(Event.COMPLETE,finChargement);
addChild(im);
}
private function finChargement(e:Event):void{
largeurIm=im.contentWidth;
hauteurIm=im.contentHeight;

largeurEcran = systemManager.stage.stageWidth;
hauteurEcran = systemManager.stage.stageHeight;

posMaxPleinEcranX = largeurIm-largeurEcran;
posMaxPleinEcranY = hauteurIm-hauteurEcran;

im.addEventListener(MouseEvent.MOUSE_MOVE,deplace);
}


private function deplace(evt:MouseEvent=null):void{
var xx:int;
var yy:int;
xx=-(evt.stageX-largeurEcran/2)
yy=-(evt.stageY-hauteurEcran/2)*2
if(xx<(largeurEcran-largeurIm)) xx=largeurEcran-largeurIm-17;
if(xx>=0)xx=0;
if(yy<(hauteurEcran-hauteurIm)) yy=hauteurEcran-hauteurIm-17;
if(yy>=0)yy=0;

im.x=xx;
im.y=yy;
}