2009-07-09 6 views
0

Je crée un éditeur visuel en flex et je dois permettre aux utilisateurs d'exporter leurs projets au format Image. Mais j'ai un problème: la taille de la toile est fixe et lorsque l'utilisateur ajoute un élément qui est hors de ces tailles, certaines barres de défilement sont ajoutées. Et l'utilisateur continue à travailler sur le projet. mais quand il veut prendre un instantané de la toile, il obtient juste la partie visible de la toile avec des barres de défilement. comment obtenir l'image de la toile pleine grandeur?Snapshot de DisplayObject dans flex 3

La seule solution que j'ai trouvée est de vérifier les positions et les tailles des objets enfants en toile et de les réajuster pour les adapter. Ensuite, prenez un instantané et redimensionnez. Mais c'est hmmmm ... trop compliqué je pense. Y a-t-il des "méthodes faciles"?

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> 
<mx:Script> 
    <![CDATA[ 
     import mx.graphics.ImageSnapshot; 

     private function SnapshotButtonHandler():void 
     { 
      var snapshot:ImageSnapshot = ImageSnapshot.captureImage(AppCanvas); 
      var file:FileReference = new FileReference(); 
      file.save(snapshot.data, "canvas.png"); 
     } 
    ]]> 
</mx:Script> 
<mx:Canvas id="AppCanvas" width="800" height="300" backgroundColor="0xFFFFFF"> 
    <mx:Box x="750" y="100" width="100" height="100" backgroundColor="0xCCCCCC" /> 
</mx:Canvas> 
<mx:Button id="SnapshotButton" label="take snapshot" click="SnapshotButtonHandler()" /> 
</mx:Application> 

Répondre

0

je mettrais un récipient dans la toile scrollable, qui adapte sa taille selon les objets ... peut-être même UIComponent ferait l'affaire ... alors faire un instantané de ce conteneur ... la toile ajoute que les barres de défilement, pour ainsi dire ...

greetz

back2dos

0

Solution i trouvé

BaseCanvas - toile wi e hauteur et largeur fixes EditCanvas - toile dynamique dont params dépend de la position de ses enfants.

L'instantané provient de EditCanvas. Ici partie du code

private function SnapshotButtonHandler():void 
{ 
    var snapshot:ImageSnapshot = ImageSnapshot.captureImage(EditCanvas); 
    var file:FileReference = new FileReference(); 
    file.save(snapshot.data, "canvas.png"); 
} 
private function ResizeCanvas():void 
{ 
    for each (var child:* in AppCanvas.getChildren()) 
    { 
     if ((child.x + child.width) > AppCanvas.width) 
      AppCanvas.width = child.x+child.width; 
     if ((child.y + child.height) > AppCanvas.height) 
      AppCanvas.height = child.y+child.height; 
    } 
} 

<mx:Canvas id="BaseCanvas" width="300" height="200"> 
    <mx:Canvas id="EditCanvas" width="300" height="200" backgroundColor="0xFFFFF0" horizontalScrollPolicy="off" verticalScrollPolicy="off"/> 
</mx:Canvas> 
0

krishna: assurez-vous de cibler flash player 10 dans votre chemin de compilation.