`
louisling
  • 浏览: 143903 次
  • 性别: Icon_minigender_1
  • 来自: ZhuHai
社区版块
存档分类
最新评论

保存Flex界面组件为本地图片文件

    博客分类:
  • Flex
阅读更多
TestApp.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
 
<mx:Script>
<![CDATA[ 
	import com.charts.ImageUtil;
	import mx.collections.ArrayCollection;
	
	[Bindable]
	private var ac:ArrayCollection;
	 	 
	private function doSaveScreen():void {	 	
		var imgUtil:ImageUtil = ImageUtil.getInstance();
		imgUtil.saveScreen(chartBox, "pipeChart-124.jpg");
	}
	 
	private function initApp():void {
	    ac = new ArrayCollection([   
	        {name: "value1",num: 10},   
	        {name: "value2",num: 15},   
	        {name: "value3",num: 20}   
	    ]);  
	
	    pieChart.dataProvider = ac;
	}
	
	private function showLabel(data:Object, field:String, index:Number, percentValue:Number):String {
	    return int(data.num/35 * 100) + "%";
	}
  ]]>
</mx:Script>

<mx:VBox>
	<mx:Button id="SaveButton" label="Save Screen" click="doSaveScreen()"/>
	
	<mx:HBox>
		<mx:Box id="chartBox" backgroundColor="white" paddingLeft="5" paddingTop="5" paddingBottom="5" paddingRight="5">
			<mx:PieChart id="pieChart" dataProvider="{ac}" width="200" height="200">
			    <mx:series>
			        <mx:PieSeries displayName="Series 1" labelFunction="showLabel" labelPosition="inside" nameField="name" field="num"/>
			    </mx:series>
			</mx:PieChart>
			<mx:Legend dataProvider="{pieChart}"/>	
		</mx:Box>
				
		<mx:Box backgroundColor="green" paddingLeft="5" paddingTop="5" paddingBottom="5" paddingRight="5">
			<mx:Image id="targetImage" x="10" y="10"/>
		</mx:Box>  
	</mx:HBox>
</mx:VBox>

</mx:Application>


ImageUtil.as
package com.sinocai.flexui.core
{
	import com.sinocai.flexui.core.amf.AsyncDataRpc;
	import com.sinocai.flexui.core.amf.RpcManager;
	
	import flash.display.BitmapData;
	import flash.utils.ByteArray;
	
	import mx.core.UIComponent;
	import mx.graphics.ImageSnapshot;
	import mx.graphics.codec.JPEGEncoder;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.ResultEvent;
	
	public class ImageUtil {				
		public static function getUIComponentBitmapData(target: UIComponent): BitmapData {
			//var m : Matrix = new Matrix();
			//var bd : BitmapData = new BitmapData(target.width, target.height);
			var bd:BitmapData = ImageSnapshot.captureBitmapData(target); //, null, null, null, null, true
			bd.draw(target);
			return bd;
		}
		 		
		private static function saveScreenHandler(event:ResultEvent, token:AsyncToken=null):void {
		 	//Alert.show("Screen is saved.");
		}
		
		//Convert the screen component as image(jpeg) byte array
		public static function getUIComponentByteArray(target: UIComponent):ByteArray {
		 	var bd: BitmapData = getUIComponentBitmapData(target);
		 	var jpgEnc:JPEGEncoder = new JPEGEncoder(100);		 	
			var imgByteArray:ByteArray = jpgEnc.encode(bd);
			return imgByteArray;
		}
		
		//Save the screen component as image(jpeg)
		public static function saveScreen(target: UIComponent, fileName:String):void {
			var imgByteArray:ByteArray = getUIComponentByteArray(target);
						
			//Save the image byte array to local image file in temporary folder
			var rpcManager:RpcManager = RpcManager.getInstance();
			var flexFileManager:AsyncDataRpc = rpcManager.buildAsyncService("flexFileManager", saveScreenHandler, null);
		 	flexFileManager.storeFile(imgByteArray, fileName);
		}
	}
}


Note:
不能够读取 style 设置的属性。
var bd : BitmapData = new BitmapData(target.width, target.height);  

可以读取 style 设置的属性。
var bd:BitmapData = ImageSnapshot.captureBitmapData(target);
0
0
分享到:
评论
2 楼 louisling 2009-09-01  
AsyncDataRpc 和 RpcManager 不是重点,这是用来在 Flex 里面调用Java的方法的2个封装了 BlazeDS 的2个类。

你可以用 RemoteObject 来调用也是一样的效果。
关键的是 ImageSnapshot.captureBitmapData(UIComponent); 可以保存组件为BitmapData ,再转换为 ByteArray.
1 楼 jauney 2009-08-21  
老大
import com.sinocai.flexui.core.amf.AsyncDataRpc;  
import com.sinocai.flexui.core.amf.RpcManager; 
这两个引用时哪的啊,提示找不到!

相关推荐

    Flex 保存组件至本地

    总结来说,将Flex组件保存为本地PNG图片涉及多个步骤,包括组件的位图渲染、PNG编码以及本地文件操作。理解并掌握这些技术对于Flex开发者来说是非常有价值的,特别是当需要提供用户离线查看组件或图表功能时。通过...

    Flex文件上传组件

    Flex文件上传组件是一种基于Adobe Flex技术的用户界面组件,用于在Web应用中实现文件上传功能。Flex是一个开源的RIA(富互联网应用)框架,它允许开发者创建交互性强、图形丰富的Web应用。在这个组件中,用户可以...

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

    在Flex开发中,图片保存至本地磁盘的功能是常见的需求,尤其在用户界面(UI)交互和调试过程中。本文将详细讲解如何实现Flex中的图片保存,包括单个UI组件的截图以及整个应用框架的截图。 首先,理解Flex的基础。...

    flex文件上传下载组件

    Flex文件上传下载组件是基于Adobe Flex技术和Java后端开发的一款功能强大的交互式应用程序,它允许用户在Web浏览器中实现文件的便捷上传与下载。这款组件通常由前端的Flex客户端和后端的Java服务器端两部分组成,...

    flex文件上传下载,在线以pdf形式浏览文件

    FileReference允许用户选择本地文件,并通过HTTP POST请求将其发送到服务器。文件上传过程中可以显示进度条,通过监听DataEvent.UPLOAD_PROGRESS事件实时更新上传进度。同时,为了保证用户体验,需要考虑文件大小...

    flex4.6 air 读写文本文件

    Adobe AIR则允许开发者创建可以在桌面环境下运行的跨平台应用程序,它提供了访问本地文件系统的能力。 要读取文本文件,我们首先需要在Flex项目中引入`File`和`FileStream`类。这两个类分别属于`flash.filesystem`...

    flex图片上传带预览功能

    标题"flex图片上传带预览功能"表明我们将讨论如何在Flex应用中整合图片上传和预览这两个关键组件。通常,这个过程涉及到以下步骤: 1. **图片选择**:用户通过文件选择对话框选择图片。在Flex中,我们可以使用`...

    flex图片查看器源码

    在Flex中,可能使用FileReference类来实现这一功能,允许用户选择本地路径并保存图片。 8. **事件监听和处理**: 在图片查看器中,可能会有许多事件监听器,如点击事件、滚动事件等。ActionScript的addEventListener...

    flex和java做的图片上传的小例子

    在标签中提到的"文件上传"和"图片上传",这两个概念在实际操作中并无太大区别,都是指通过网络将本地文件传输到服务器的过程。"小例子"表明这是一个教学或演示性质的项目,可能只包含基本功能,用于学习和理解图片...

    flex 多文件上传

    Flex是一款强大的RIA(富互联网应用)开发工具,它基于ActionScript编程语言和Flash Player运行时环境,提供丰富的用户界面组件和交互体验。 在Flex中实现多文件上传,通常会涉及以下几个关键知识点: 1. **...

    flex3+java文件上传

    Flex3是Adobe Flex框架的一个版本,它提供了丰富的用户界面组件和ActionScript编程模型,用于构建富互联网应用程序(RIA)。而Java则在服务端提供稳定且强大的业务逻辑处理能力。 在Flex3中,文件上传主要通过Flash...

    Flex和Servlet结合上传文件

    在文件上传场景中,Flex可以设计一个包含文件选择按钮和进度条的界面,用户可以选择本地文件并触发上传操作。 接下来,当用户点击上传按钮后,Flex会通过HTTP POST请求将文件数据发送到服务器端的Servlet。在...

    Flex万年历记事本_flex源码

    Flex应用可以利用本地存储机制,如SQLite数据库或者XML文件,来保存用户的记事内容。 9. **样式和皮肤**:Flex支持样式和皮肤,开发者可以通过定义CSS样式来改变组件的外观,使应用符合特定的设计风格。 10. **...

    Flex 上传文件控件 (带java服务端)

    在Flex中,我们可以使用各种组件来实现用户界面,其中包括文件上传功能。本项目提供了一个完整的Flex文件上传控件,且集成了Java服务端处理,允许用户上传文件到服务器,并能进行多文件或单文件选择,以及设置上传...

    Flex上传文件与下载

    - 客户端接收文件流并保存为本地文件。 #### 四、代码解析 ##### 文件选择对话框 ```as3 private function openDaig():void { file.browse([filter]); file.addEventListener(Event.SELECT, selectHandle); ...

    flex多文件上传控件(flex源码)

    在Flex中,文件上传通常涉及到FileReference类,该类允许用户选择本地文件,并通过HTTP或FTP上传。开发者可能需要编写事件监听器来处理选择文件、开始上传、上传进度和完成上传等事件。 在使用这个Flex多文件上传...

    flex 播放器 , 上传文件

    而`up.htm`则可能包含一个用于文件上传的Flex组件,用户可以选择本地文件并提交到服务器。 `upload.php`是后端处理文件上传的脚本,通常会接收由FileReference.upload()发送的文件数据,并保存到服务器的特定目录。...

    Flex4 文件上传

    1. **用户界面**:在Flex中,通常会使用一个组件,如FileUpload控件,允许用户选择本地文件。用户点击按钮,系统弹出文件选择对话框,用户选取文件后,FileReference对象会被初始化。 2. **FileReference类**:这是...

    Flex 上传多个文件

    FileReference是Flash Player提供的一个API,用于处理用户选择的本地文件。在Flex中,我们可以创建多个FileReference对象,每个对象对应用户选择的一个文件。当用户选择多个文件后,可以通过循环遍历这些对象来逐个...

    flex文件系统应用

    在Flex中,文件系统的操作是通过File和FileStream类来实现的,这些类提供了对本地文件系统的访问和管理能力。 首先,我们要了解Flex中的File类。File类是Flex与本地文件系统交互的基础,它可以代表计算机上的任何...

Global site tag (gtag.js) - Google Analytics