2009-07-09 56 views
0

我在flex中創建一個可視化編輯器,並且需要讓用戶將他們的項目導出爲圖像格式。但我有一個問題:畫布的大小是固定的,當用戶添加超出這些尺寸的元素時,會添加一些滾動條。用戶繼續在該項目上工作。但是當他想抓取畫布的快照時,他只能看到帶滾動條的畫布上的可見部分。如何獲得全尺寸畫布的圖像?flex 3中的DisplayObject快照

我發現的唯一解決方案是檢查畫布子對象的位置和大小,並將其重新合併以適合它們。然後拍攝並調整大小。但它嗯...我覺得太複雜了。有一些「簡單的方法」嗎?

<?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> 

回答

0

我把一個容器可滾動的帆布,能夠適應它按照它的對象是大小...甚至UIComponent會做的伎倆......然後做容器的快照...的畫布只增加了滾動條,可以這麼說......

格爾茨

back2dos

0

解決方案,我發現

BaseCanvas - 帆布無線固定的高度和寬度 EditCanvas - 動態畫布,其參數取決於它的孩子的位置。

快照來自EditCanvas。這裏代碼的一部分

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

克里希納:確保您的目標是在您的構建路徑中的Flash Player 10。