2009-10-19 2 views
1

응용 프로그램에서 사용하고있는 mxml 구성 요소의 '동적'축소판을 만들 수 있습니까? 내가 MXML 구성 요소의 일부 레이아웃을 변경하면 내 말은 '동적'으로 내 축소판) = photoshoping 또는 이와 유사한 어떤 화면 캡처없이 새로운 레이아웃에 따라 갱신Flex의 mxml 구성 요소에 대한 썸네일

편집 :
나는 FlexBook 구성 요소를 사용하고있는 mxml 구성 요소의 '책'을 만듭니다 (각 페이지마다 많은 상호 작용이 있기 때문에). 문제가 비트 맵 데이터가 실제로 페이지를 넘기 시작할 때까지 존재하지 않는다고 생각합니다. 하지만 비트 맵 데이터를 생성 완료하고 싶습니다.

감사합니다.


좋아, 내가 MXML의 '책'을 만드는 FlexBook 구성 요소를 사용하고 있습니다 .. 제가이 나는 그것이 될 것입니다 생각했던 것보다 더 복잡보기 때문에 조금 더 설명하려고

하자 구성 요소 (각 페이지에는 많은 독립적 인 상호 작용이 있기 때문에). 문제가 비트 맵 데이터가 실제로 페이지를 넘기 시작할 때까지 존재하지 않는다고 생각합니다. 하지만 비트 맵 데이터를 생성 완료하고 싶습니다 ...

도움을 주셔서 감사합니다!
m.

+0

당신은이 응용 프로그램의 축소판 의미입니까? 그리고 썸네일이 BitmapData가 되길 원하십니까? –

+0

음 ... 응, 응? 그것들은 mxml 파일이고, 그것들을 주 응용 프로그램의 구성 요소로 사용합니다. 내가 사용하는 각 구성 요소의 축소판이 필요합니다. BitmapData가 멋지다고 생각합니다. 예 =) – errata

답변

2

저는 오래 전에 코딩 한 기능입니다. DisplayObject (mxml 구성 요소도 DisplayObject)이면 Bitmap을 반환합니다.

구성 요소가 변경 될 때 Bitmap을 업데이트하기 위해 mxml 구성 요소의 Event.RENDER을 수신 대기하는 처리기를 작성할 수 있습니다. 당신이 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' 함수를 사용하십시오 : –

+0

안녕하세요.이 위대한 도움에 감사드립니다! BitmapData 및 ImageSnapshot 클래스를 사용하여 놀고 있었지만 여전히 내 책의 페이지 축소판을 가져올 수 없습니다 ... 즉 렌더링 된 첫 페이지의 미리보기 이미지를 성공적으로 만들 수 있지만 다른 렌더링되지 않은 '렌더링되지 않은' 'pages ... 어쨌든 한 번 더 감사드립니다! – errata