Flex提供了两种方法截图,一个是BitmapData的draw 方法,另一个是ImageSnapshot 提供的captureImage和captureBitmapData静态方法,其实这两种方法没有什么本质的区别,因为ImageSnapshot提供的这些方法本质上也是通过BitmapData的draw方法来截图的。
如果非要要说有什么区别的话,那就是ImageSnapShot提供的这些方法你没有办法设置要截取多大,它会自动根据你传入的对象来算长宽。而BitmapData你可以再创建的时候指定长宽,那样你就可以截图想要的长宽了。
下面的例子是我做的一些测试代码,仅供参考。
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:Vgroup="com.view.Vgroup.*"> <fx:Declarations> <fx:XMLList id="employees"> <employee> <name>Christina Coenraets</name> <phone>555-219-2270</phone> <email>ccoenraets@fictitious.com</email> <active>true</active> </employee> <employee> <name>Joanne Wall</name> <phone>555-219-2012</phone> <email>jwall@fictitious.com</email> <active>true</active> </employee> <employee> <name>Maurice Smith</name> <phone>555-219-2012</phone> <email>maurice@fictitious.com</email> <active>false</active> </employee> <employee> <name>Mary Jones</name> <phone>555-219-2000</phone> <email>mjones@fictitious.com</email> <active>true</active> </employee> </fx:XMLList> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Image; import mx.core.IUIComponent; import mx.core.UIComponent; import mx.graphics.ImageSnapshot; import mx.graphics.codec.PNGEncoder; import spark.components.Label; import spark.filters.GlowFilter; [Embed(source='column_cone_1.png')] private var mark:Class; private function captureClickHandler(event:MouseEvent):void { var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(dg); var imageByteArray:ByteArray = imageSnap.data as ByteArray; var loader:Loader = new Loader(); loader.loadBytes(imageByteArray); var ui:UIComponent = new UIComponent(); ui.addChild(loader); this.addElement(ui); } private function captureBitmapDataClickHandler(event:MouseEvent):void { var imageBitMapData:BitmapData=ImageSnapshot.captureBitmapData(dg); var pic:Bitmap= new mark(); var matrix:Matrix = new Matrix() matrix.translate(40,40); imageBitMapData.draw(pic,matrix);// 添加图片水印效果 addImage(imageBitMapData); } private function waterMarkClickHandler(event:MouseEvent):BitmapData { var imageBitMapData:BitmapData=ImageSnapshot.captureBitmapData(dg); var matrix:Matrix = new Matrix() matrix.translate(40,40); imageBitMapData.draw(waterLabel,matrix);// 添加文字水印效果 addImage(imageBitMapData); return imageBitMapData; } private function drawClickHandler(event:MouseEvent):void { var bitmapData:BitmapData = new BitmapData(testV.width,350); /*用bitmapData操作抓图,你的首先预设它的width,height。 clipAndEnableScrolling 为false时,group里面的内容会全部显示出来,不管group的实际长宽。 这个时候去抓图,可以把全部的内容抓到。如果为ture,group里面的内容超出group的显示区域的会被隐藏, 所以就只能抓到显示区域的内容了。 当然,如果你加了scroller,不管用bitmapdata还是ImageSnapshot,都只能抓到显示区域的内容了。 */ bitmapData.draw(testV,new Matrix()); addImage(bitmapData); var label:Label = new Label(); label.text = "adfasdf"; this.addElement(label); } private function captureInClipClickHandler(event:MouseEvent):void { var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(testV); /*用ImageSnapshot抓图,它不会设置长宽,所以就只能抓到显示对象的实际长宽里面的内容了 */ var imageByteArray:ByteArray = imageSnap.data as ByteArray; var loader:Loader = new Loader(); loader.loadBytes(imageByteArray); var ui:UIComponent = new UIComponent(); ui.addChild(loader); this.addElement(ui); } private function saveClickHandler(event:MouseEvent):void { var imageBitMapData:BitmapData= waterMarkClickHandler(event); var file:FileReference = new FileReference(); var date:Date = new Date(); var jpgEncoder:PNGEncoder = new PNGEncoder(); var ba:ByteArray = jpgEncoder.encode(imageBitMapData); file.save(ba, date.getTime().toString() + ".jpg"); } private function addImage(mapData:BitmapData):void { var map:Bitmap = new Bitmap(); map.bitmapData = mapData; var img:Image = new Image(); img.source = map; this.addElement(img); } ]]> </fx:Script> <s:layout> <s:VerticalLayout/> </s:layout> <s:Label id="waterLabel" text="KENNY WATERMARK EXAMPLE" filters="{[new GlowFilter(0x333333, 1, 2, 2, 3)]}" visible="false" includeInLayout="false"/> <s:HGroup> <s:Button label="captureImage" click="captureClickHandler(event)"/> <s:Button label="captureBitmapData" click="captureBitmapDataClickHandler(event)"/> <s:Button label="waterMarkForCharactors" click="waterMarkClickHandler(event)"/> <s:Button label="draw" click="drawClickHandler(event)"/> <s:Button label="captureImageWithClipAndEnableScrolling" click="captureInClipClickHandler(event)"/> <s:Button label="SaveASPicture" click="saveClickHandler(event)"/> </s:HGroup> <s:HGroup> <mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{employees}"> <mx:columns> <mx:DataGridColumn dataField="name" headerText="Name"/> <mx:DataGridColumn dataField="phone" headerText="Phone"/> <mx:DataGridColumn dataField="email" headerText="Email"/> </mx:columns> </mx:DataGrid> <!--<s:Scroller>//可以自己加上Scroller试试--> <s:VGroup height="150" clipAndEnableScrolling="false" id="testV"> <s:Button height="50" label="test"/> <s:Button height="50" label="test1"/> <s:Button height="50" label="test2"/> <s:Button height="50" label="test3"/> <s:Button height="50" label="test4"/> </s:VGroup> <!--</s:Scroller>--> </s:HGroup> </s:Application>
这里没有涉及到抓图的高级应用和安全问题,有空会再写一些这方面的测试。
相关推荐
【标题】:“Flex截图”指的是使用Adobe Flex技术进行屏幕截图的相关知识。Flex是Adobe公司推出的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA)。在Flex应用中,实现截图功能可以让用户方便...
#### 一、Flex截图功能原理 在Flex中,实现截图功能主要是通过`mx.graphics.ImageSnapshot`类来完成。`ImageSnapshot`类提供了`captureImage()`方法,该方法可以将指定的`Canvas`或显示对象转换为位图图像(Bitmap...
本场景中,我们关注的是使用Flex进行截图并利用Java后台处理上传的流程。Flex是一种开源的、基于Adobe Flash Player运行时的开发框架,常用于创建富互联网应用(RIA)。而Java则是一个广泛使用的后端编程语言,它...
本文将详细讲解如何实现Flex中的图片保存,包括单个UI组件的截图以及整个应用框架的截图。 首先,理解Flex的基础。Flex是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。它允许...
Flex 实现的截图。一个是通过鼠标左键拖拽,类似qq截图。另一个是初始时就有矩形截图框,截图狂可以通过拖拽进行放大缩小。被截的背景图一种是图片尺寸的放大缩小,一种是图片所在画布的Scale方式放大缩小。
Flex涂鸦功能Demo程序是一个基于Adobe Flex技术实现的互动绘图应用。Flex是一种开源的、基于ActionScript 3.0的开发框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定机制,...
小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 Flex...
2. **屏幕捕获**:Flex截图工具实现了在Flash Player环境中捕获屏幕内容的功能。这通常涉及到使用StageCaptureArea类或相关的API来选取屏幕的一部分并保存为图像数据。 3. **图片编辑**:工具可能包含了对截图进行...
FlexAir网页截图工具是一款专为用户设计的高效网页捕获软件,它允许用户方便快捷地截取并保存网页内容。这款工具集成了多种实用功能,旨在优化网页截图体验,提高工作效率。 在使用FlexAir网页截图工具时,首先需要...
Flex 4 是 Adobe 开发的一款用于构建富互联网应用程序(Rich Internet Applications, RIA)的框架,它是 Flex 3 的升级版本,提供了许多增强特性和改进。这个“flex4 视频教程截取的一些图片”很可能是为了辅助学习...
标题中的“flex的远程对象调用”指的是在Adobe Flex应用程序中使用Remote Object(RO)服务进行远程通信的技术。Flex是一个开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。通过RO服务,Flex应用...
类似QQ截图功能,可以利用flash截取当前选定的页面
图片文件可能是展示了Flex Builder IDE的界面截图,用于说明如何配置日志输出或者展示日志结果。 总之,掌握Flex Builder中的日志管理技巧,对于提升Flex应用程序的开发效率和问题解决能力具有重要意义。通过灵活地...
综上所述,"翻书和截屏Flex"涉及到的技术点包括Flex框架的使用、自定义组件开发、动画与图形渲染、屏幕截图的实现以及与本地文件系统的交互。这些知识对于构建具有丰富用户体验的RIA应用至关重要。
`cg.JPG`和`origin_image001.jpg`可能是其他相关的图表或截图,进一步阐述概念。`flex_mvc.rar`可能是一个包含示例代码或项目文件的压缩包,供学习和实践使用。 在实际开发中,利用Flex MVC架构可以实现模块化的...
微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——...
PPT通常包含关键概念的总结、流程图、重要代码片段以及示例应用的截图。这样的教学材料对于自我学习或者课堂教学都非常有用,它可以帮助读者更好地理解和记忆Flex的架构、设计模式和最佳实践。通过PPT,学习者可以...
这个文档可能还会包含示例代码、截图和详细的解释,以便于你在阅读时能更好地理解和模仿。 总的来说,Flex教程案例是一个全面的学习资源,不仅教你掌握Flex的基本知识,还通过实践案例帮助你提升技能。通过这个教程...
- "Flex+LCDS+Java+整合实例.doc":可能包含了一个详细的整合步骤指南,包括配置、代码示例和屏幕截图。 - "Java平台下基于Flex3开发的实例.doc":可能详细讲解了如何在Java平台上使用Flex3开发应用程序,可能包括...