2009-10-19 6 views
1

Est-il possible de créer des miniatures "dynamiques" pour les composants mxml que j'utilise dans mon application? Par « dynamique » Je veux dire si je change d'une mise en page en composant MXML, ongle de mon pouce rafraichit selon une nouvelle mise en page sans capture d'écran, photoshoping ou similaire =)Miniatures pour les composants mxml dans Flex

Edit:
J'utilise un composant FlexBook, qui fait un «livre» de composants mxml (parce que chaque page a de nombreuses interactions indépendantes). Je pense que ce problème pourrait être que les données bitmap n'existent pas jusqu'à ce que je commence réellement à tourner les pages. Mais je voudrais obtenir des données bitmap sur la création complète.

Merci!


Ok, je vais essayer d'expliquer un peu plus parce que je vois cela est plus compliqué que je pensais que ce sera ..

J'utilise un composant FlexBook, ce qui en fait un « livre » de mxml composants (parce que chaque page a de nombreuses interactions indépendantes). Je pense que ce problème pourrait être que les données bitmap n'existent pas jusqu'à ce que je commence réellement à tourner les pages. Mais je voudrais obtenir des données bitmap sur la création complète ...

Merci pour l'aide!
m.

+0

Vous voulez dire qu'il est la miniature de l'application? Et vous voulez que la vignette soit BitmapData ou quoi? –

+0

Hmmm ... Eh bien, l'application? Ce sont des fichiers mxml et je les utilise comme composants dans mon application principale. J'ai besoin d'une vignette de chaque composant que j'utilise ... Je suppose que BitmapData serait cool, oui =) – errata

Répondre

2

Voici une fonction que j'ai codée depuis longtemps. Il faut un DisplayObject (les composants mxml sont également DisplayObject), il renverra un .

Vous pouvez écrire un gestionnaire pour écouter Event.RENDER du composant mxml pour mettre à jour le Bitmap lorsque le composant est modifié.

Une autre chose que vous pouvez essayer sur le composant FlexBook est de mettre creationPolicy="all" ...

/** 
* This function returns a Bitmap that have the same look of a given DisplayObject. 
* Ref.: http://qops.blogspot.com/2008/05/bitmap.html 
* @author Andy Li [email protected] 
* @version 20080529 
*/ 
package net.onthewings{ 
    import flash.geom.Point; 
    import flash.geom.Rectangle; 
    import flash.geom.Matrix; 
    import flash.display.DisplayObject; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.PixelSnapping; 
    import flash.display.Stage; 

    public function bitmapEquivalentOf(obj:DisplayObject, extendsRectSidesBy:Number = 0, clipOutside = null,alpha:Boolean = true):Bitmap { 
     if (obj.width && obj.height) { 
      var bitmapData:BitmapData = new BitmapData(obj.width, obj.height, alpha, 0xFFFFFF); 
      var rect:Rectangle = obj.getBounds(obj); 
      var matrix:Matrix = new Matrix; 
      matrix.translate(-rect.x, -rect.y); 
      bitmapData.draw(obj, matrix); 
      var bitmap:Bitmap = new Bitmap(bitmapData, PixelSnapping.AUTO, true); 
      bitmap.x = rect.x; 
      bitmap.y = rect.y; 
      var ebd:BitmapData; 

      if (clipOutside) { 
       var h:Number; 
       var w:Number; 
       if (clipOutside is Stage) { 
        h = clipOutside.stageHeight; 
        w = clipOutside.stageWidth; 
       } else { 
        h = clipOutside.height; 
        w = clipOutside.width; 
       } 
       if(!(h && w)){ 
        return null; 
       } 
       var pt:Point = obj.localToGlobal(new Point(rect.x,rect.y)); 
       ebd = new BitmapData(w, h, true, 0xFFFFFF); 
       ebd.copyPixels(bitmap.bitmapData,new Rectangle(-pt.x,-pt.y,w,h),new Point(0,0)); 
       bitmap = new Bitmap(ebd, PixelSnapping.AUTO, true); 
      } else if (extendsRectSidesBy) { 
       ebd = new BitmapData(bitmapData.width+extendsRectSidesBy*2, bitmapData.height+extendsRectSidesBy*2, true, 0xFFFFFF); 
       ebd.copyPixels(bitmap.bitmapData,bitmap.bitmapData.rect,new Point(extendsRectSidesBy,extendsRectSidesBy)); 
       bitmap = new Bitmap(ebd, PixelSnapping.AUTO, true); 
       bitmap.x = rect.x - extendsRectSidesBy; 
       bitmap.y = rect.y - extendsRectSidesBy; 
      } 
      return bitmap; 
     } else { 
      return null; 
     } 
    } 
} 
+0

Je viens de découvrir qu'il existe une classe 'ImageSnapshot' dans Flex qui devrait être meilleure que ma vieille fonction. Utilisez sa fonction 'captureBitmapData' :) –

+0

Salut bonjour et merci pour cette aide! Je jouais avec des classes BitmapData et ImageSnapshot mais je n'arrive toujours pas à obtenir des vignettes pour les pages de mon livre ... Je peux créer une vignette pour la première page (qui est immédiatement rendue), mais je n'ai pas beaucoup de succès avec d'autres 'pages ... En tout cas, merci encore une fois! – errata

Questions connexes