2012-03-12 41 views
0

在過去的幾個小時裏,我一直試圖克隆Flex中的圖像(使用Spark組件,但也嘗試在Bitmap和BitmapImage之間進行轉換)。在Flex中克隆圖像4.6

我正在嘗試的是創建一個簡單的繪畫應用程序,以跟蹤每個筆刷描邊。只要Canvas上的圖像發生了變化,它就會被克隆,然後克隆將被放入應用程序底部的歷史記錄面板中。

事情我已經嘗試包括:

  • 使用ObjectUtils.clone(對象)
  • 從Image.content創建的BitmapData,然後使其成爲一個位圖,只顯示它(圖片不具有內容它說)
  • 執行字節複製 和其他我可以在互聯網上找到,當然。

那麼基本上,如何在Flex 4.6中克隆Image(Spark Image)?

非常感謝!

- 丹尼Nophut

回答

10

相反,克隆可以拿到圖紙的圖像和圖像設置爲源,以歷史圖像的位圖,做一些這樣的事

private function getBitmapData(target:DisplayObject) : BitmapData 
{ 

    //target.width and target.height can also be replaced with a fixed number. 
    var bd : BitmapData = new BitmapData(target.width, target.height); 
    bd.draw(target); 
    return bd; 
} 

在有些情況下,如果目標的寬度和高度不起作用,則可以使用getbounds方法獲取對象的邊界,並從邊界獲取寬度和高度。

+1

+1從我這裏。我沒有驗證代碼;但是這個概念就是我所推薦的。 – JeffryHouser 2012-03-12 17:00:27

+0

非常感謝,似乎工作:) 現在我所做的就是把它變成一個位圖對象,並顯示它? – 2012-03-12 17:06:07

+0

@ www.Flextras.com感謝兄弟。 – Triode 2012-03-12 17:06:47

1

有一個的BitmapData克隆功能:

public class EZB2ParkObject extends Image implements IEZB2ParkObject 
{ 

    public function clone():IEZB2ParkObject{ 
     var n:IEZB2ParkObject = new EZB2ParkObject(); 
     n.id = this.id; 
     n.source = new Bitmap(BitmapData(this.source.bitmapData).clone()); 
     n.dimensions = this.dimensions; 
     n.assetId = this.assetId; 
     return n; 
    } 
}