2012-03-12 52 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; 
    } 
}