`
luhantu
  • 浏览: 205268 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex 截图

    博客分类:
  • Flex
阅读更多

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>

 这里没有涉及到抓图的高级应用和安全问题,有空会再写一些这方面的测试。

0
5
分享到:
评论

相关推荐

    flex 截图

    【标题】:“Flex截图”指的是使用Adobe Flex技术进行屏幕截图的相关知识。Flex是Adobe公司推出的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA)。在Flex应用中,实现截图功能可以让用户方便...

    flex中获取截屏方法 html文档说明

    #### 一、Flex截图功能原理 在Flex中,实现截图功能主要是通过`mx.graphics.ImageSnapshot`类来完成。`ImageSnapshot`类提供了`captureImage()`方法,该方法可以将指定的`Canvas`或显示对象转换为位图图像(Bitmap...

    flex 截图并上传到服务器中

    本场景中,我们关注的是使用Flex进行截图并利用Java后台处理上传的流程。Flex是一种开源的、基于Adobe Flash Player运行时的开发框架,常用于创建富互联网应用(RIA)。而Java则是一个广泛使用的后端编程语言,它...

    flex-图片保存-本地磁盘-单个ui截屏-整个框架截屏

    本文将详细讲解如何实现Flex中的图片保存,包括单个UI组件的截图以及整个应用框架的截图。 首先,理解Flex的基础。Flex是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。它允许...

    Flex截图Screenshot

    Flex 实现的截图。一个是通过鼠标左键拖拽,类似qq截图。另一个是初始时就有矩形截图框,截图狂可以通过拖拽进行放大缩小。被截的背景图一种是图片尺寸的放大缩小,一种是图片所在画布的Scale方式放大缩小。

    Flex涂鸦功能Demo程序下载

    Flex涂鸦功能Demo程序是一个基于Adobe Flex技术实现的互动绘图应用。Flex是一种开源的、基于ActionScript 3.0的开发框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户界面组件和强大的数据绑定机制,...

    小程序源码 FlexLayout布局 (代码+截图)

    小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 FlexLayout布局 (代码+截图)小程序源码 Flex...

    Flex写的图片截图工具(源码)

    2. **屏幕捕获**:Flex截图工具实现了在Flash Player环境中捕获屏幕内容的功能。这通常涉及到使用StageCaptureArea类或相关的API来选取屏幕的一部分并保存为图像数据。 3. **图片编辑**:工具可能包含了对截图进行...

    flexair网页截图工具

    FlexAir网页截图工具是一款专为用户设计的高效网页捕获软件,它允许用户方便快捷地截取并保存网页内容。这款工具集成了多种实用功能,旨在优化网页截图体验,提高工作效率。 在使用FlexAir网页截图工具时,首先需要...

    flex4 视频教程截取的一些图片

    Flex 4 是 Adobe 开发的一款用于构建富互联网应用程序(Rich Internet Applications, RIA)的框架,它是 Flex 3 的升级版本,提供了许多增强特性和改进。这个“flex4 视频教程截取的一些图片”很可能是为了辅助学习...

    上一篇的flex的远程对象调用,flex和spring集成分页的jar和截图

    标题中的“flex的远程对象调用”指的是在Adobe Flex应用程序中使用Remote Object(RO)服务进行远程通信的技术。Flex是一个开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。通过RO服务,Flex应用...

    flex截图组件

    类似QQ截图功能,可以利用flash截取当前选定的页面

    Flex Builder

    图片文件可能是展示了Flex Builder IDE的界面截图,用于说明如何配置日志输出或者展示日志结果。 总之,掌握Flex Builder中的日志管理技巧,对于提升Flex应用程序的开发效率和问题解决能力具有重要意义。通过灵活地...

    翻书和截屏Flex

    综上所述,"翻书和截屏Flex"涉及到的技术点包括Flex框架的使用、自定义组件开发、动画与图形渲染、屏幕截图的实现以及与本地文件系统的交互。这些知识对于构建具有丰富用户体验的RIA应用至关重要。

    flex mvc 架构图

    `cg.JPG`和`origin_image001.jpg`可能是其他相关的图表或截图,进一步阐述概念。`flex_mvc.rar`可能是一个包含示例代码或项目文件的压缩包,供学习和实践使用。 在实际开发中,利用Flex MVC架构可以实现模块化的...

    微信小程序——FlexLayout布局(截图+源码).zip

    微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——FlexLayout布局(截图+源码).zip 微信小程序——...

    《Flex完全自学手册》源码+电子教案(PPT)

    PPT通常包含关键概念的总结、流程图、重要代码片段以及示例应用的截图。这样的教学材料对于自我学习或者课堂教学都非常有用,它可以帮助读者更好地理解和记忆Flex的架构、设计模式和最佳实践。通过PPT,学习者可以...

    Flex教程案例

    这个文档可能还会包含示例代码、截图和详细的解释,以便于你在阅读时能更好地理解和模仿。 总的来说,Flex教程案例是一个全面的学习资源,不仅教你掌握Flex的基本知识,还通过实践案例帮助你提升技能。通过这个教程...

    flex java整合案例(使用BlazeDS和LCDS整合)

    - "Flex+LCDS+Java+整合实例.doc":可能包含了一个详细的整合步骤指南,包括配置、代码示例和屏幕截图。 - "Java平台下基于Flex3开发的实例.doc":可能详细讲解了如何在Java平台上使用Flex3开发应用程序,可能包括...

Global site tag (gtag.js) - Google Analytics