我目前正在尝试使用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);
现在我认为这是我想要的视图堆的形象......但我很难从这里做什么!是不是现在只能将图像复制到剪贴板,或者在浏览器中生成一个包含整个图像的新窗口?如果有人有任何其他方法可以做到这一点,建议会很棒。
感谢您的时间。
答案 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