2009-10-19 64 views
1

是否可以为我在应用程序中使用的mxml组件创建某种“动态”缩略图?通过“动态”我的意思是,如果我在MXML组件改变一些布局,我的缩略图按照在没有任何屏幕捕捉新的布局刷新,经过PHOTOSHOP或类似=)Flex中的mxml组件的缩略图

编辑:
我使用的是FlexBook组件,它制作mxml组件的“书”(因为每个页面都有许多独立的交互)。我认为这个问题可能是在我真的开始翻页之前,位图数据不存在。但是我想在创建完成时获取位图数据。

谢谢!


好吧,让我来试着解释多一点,因为我认为这是比我想象的将是更加复杂..

我使用的是FlexBook组件,这使得MXML的“书”组件(因为每个页面都有许多独立的交互)。我认为这个问题可能是在我真的开始翻页之前,位图数据不存在。但我想获得创建完成的位图数据...

感谢您的帮助!
m。

+0

你的意思是应用程序的缩略图?你想要缩略图是BitmapData还是什么? – 2009-10-19 15:34:50

+0

嗯......应用程序?他们是mxml文件,我在主应用程序中将它们用作组件。我需要我使用的每个组件的缩略图...我想BitmapData会很酷,是的=) – errata 2009-10-19 15:43:20

回答

2

这是我很久以前编写的一个函数。它需要DisplayObject(mxml组件也是DisplayObject),它会返回一个Bitmap它。

您可以编写处理程序来侦听mxml组件的Event.RENDER,以更新组件更改时的Bitmap

你可以尝试FlexBook组件上的另一件事情是设置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

我刚刚发现Flex中有'ImageSnapshot'类,它应该更适合我的旧功能。使用它的'captureBitmapData'函数:) – 2009-10-19 16:30:43

+0

嘿,你好,谢谢你的帮助!我在玩BitmapData和ImageSnapshot类,但我仍然无法获取书中的页面缩略图...我可以成功制作第一页的缩略图(立即呈现),但我没有那么成功, '网页......无论如何,再次感谢你! – errata 2009-10-19 20:47:55