Flex 3 - 保存组件的图像

时间:2009-10-07 21:35:20

标签: flex image

我目前正在尝试使用flex中的imageSnapshot函数。我一直在努力寻找,但我似乎无法找到解决问题的方法。我希望获取我的一个组件的截图,以捕获我的程序的最终输出,因为简单的“打印屏幕”由于它滚动而切断了一些输出。我目前的代码看起来像 -

<mx:ApplicationControlBar dock="true">
    <mx:Button label="Take snapshot of Profile" 
        click="takeSnapshot();" />
</mx:ApplicationControlBar> 

当被召唤时 -

private function takeSnapshot(even:Event=null):void {
    var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(viewstack1);

现在我认为这是我想要的视图堆的形象......但我很难从这里做什么!是不是现在只能将图像复制到剪贴板,或者在浏览器中生成一个包含整个图像的新窗口?如果有人有任何其他方法可以做到这一点,建议会很棒。

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

您可以将视图堆栈绘制到BitmapData对象中,并使用as3corelib将其编码为png。类似的东西:

var screenshotData : BitmapData = new BitmapData(viewstack1.width, viewstack1.height, true, 0x00000000);
screenshotData.draw(viewstack1);
var outputData:ByteArray = PNGEncoder.encode(screenshotData);
// Save outputData as a file to disk, send to webserver etc..

编辑:呃,这可能会让你更加困惑。对于那个很抱歉。 ImageSnapshot有一个名为data的属性,我猜测它会给你几乎相同的结果。您可以使用flash.net.FileReference

将其作为文件保存到磁盘

答案 1 :(得分:2)

我在Antti的示例上构建了一个工作组件(带有完整代码),您可以查看here。 你可以打印几乎任何你喜欢的组件(我有一个图像和数据网格。)

您需要添加到Antti的代码中的所有内容是:

var fr:FileReference = new FileReference();
var encoder:PNGEncoder = new PNGEncoder();

//Antti's code here

fr.save(outputData,"datagrid.jpg");

这将为您打开一个文件保存对话框。

干杯, CASP