我想在我的flex应用程序中捕获整个屏幕。我google了很多,但找到了方法只捕获空气窗口屏幕,我想捕获用户的整个屏幕。我有一种方法使用“NitroScreenCap”,但我不明白如何在我的应用程序中实现这一点。有人可以建议我解决这个问题吗?
答案 0 :(得分:0)
您可以使用ImageSnapshot.captureImage()来捕获您的Flex应用程序屏幕,请尝试以下示例:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.core.IUIComponent;
import mx.graphics.ImageSnapshot;
private function takeSnapshot(source:IBitmapDrawable):void {
var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(source);
var imageByteArray:ByteArray = imageSnap.data as ByteArray;
swfLoader.load(imageByteArray);
}
]]>
</mx:Script>
<mx:Array id="arr">
<mx:Object col1="Row 1, Col 1" col2="Row 1, Col 2" />
<mx:Object col1="Row 2, Col 1" col2="Row 2, Col 2" />
<mx:Object col1="Row 3, Col 1" col2="Row 3, Col 2" />
<mx:Object col1="Row 4, Col 1" col2="Row 4, Col 2" />
<mx:Object col1="Row 5, Col 1" col2="Row 5, Col 2" />
<mx:Object col1="Row 6, Col 1" col2="Row 6, Col 2" />
</mx:Array>
<mx:ApplicationControlBar dock="true">
<mx:Button label="Take snapshot of DataGrid"
click="takeSnapshot(dataGrid);" />
</mx:ApplicationControlBar>
<mx:HBox>
<mx:DataGrid id="dataGrid" dataProvider="{arr}" />
<mx:SWFLoader id="swfLoader">
<mx:filters>
<mx:DropShadowFilter />
</mx:filters>
</mx:SWFLoader>
</mx:HBox>
</mx:Application>
答案 1 :(得分:-2)
要在我的Flex应用程序中捕获DisplayObject,我使用类PNGEnc。
以下是他使用的代码示例:
var c2 : DisplayObject = c.getChildAt(0) as DisplayObject;
var bd:BitmapData = new BitmapData(c2.width,c2.height);
bd.draw(c2); // Graph copy
var screen:ByteArray = PNGEnc.encode(bd); // PNG format conversion
接下来,我发送我的ByteArray将它保存在Java服务器上,但我认为你也可以使用
new FileReference()。save(screen)