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);
分享到:
相关推荐
总结来说,将Flex组件保存为本地PNG图片涉及多个步骤,包括组件的位图渲染、PNG编码以及本地文件操作。理解并掌握这些技术对于Flex开发者来说是非常有价值的,特别是当需要提供用户离线查看组件或图表功能时。通过...
Flex文件上传组件是一种基于Adobe Flex技术的用户界面组件,用于在Web应用中实现文件上传功能。Flex是一个开源的RIA(富互联网应用)框架,它允许开发者创建交互性强、图形丰富的Web应用。在这个组件中,用户可以...
在Flex开发中,图片保存至本地磁盘的功能是常见的需求,尤其在用户界面(UI)交互和调试过程中。本文将详细讲解如何实现Flex中的图片保存,包括单个UI组件的截图以及整个应用框架的截图。 首先,理解Flex的基础。...
Flex文件上传下载组件是基于Adobe Flex技术和Java后端开发的一款功能强大的交互式应用程序,它允许用户在Web浏览器中实现文件的便捷上传与下载。这款组件通常由前端的Flex客户端和后端的Java服务器端两部分组成,...
FileReference允许用户选择本地文件,并通过HTTP POST请求将其发送到服务器。文件上传过程中可以显示进度条,通过监听DataEvent.UPLOAD_PROGRESS事件实时更新上传进度。同时,为了保证用户体验,需要考虑文件大小...
Adobe AIR则允许开发者创建可以在桌面环境下运行的跨平台应用程序,它提供了访问本地文件系统的能力。 要读取文本文件,我们首先需要在Flex项目中引入`File`和`FileStream`类。这两个类分别属于`flash.filesystem`...
标题"flex图片上传带预览功能"表明我们将讨论如何在Flex应用中整合图片上传和预览这两个关键组件。通常,这个过程涉及到以下步骤: 1. **图片选择**:用户通过文件选择对话框选择图片。在Flex中,我们可以使用`...
在Flex中,可能使用FileReference类来实现这一功能,允许用户选择本地路径并保存图片。 8. **事件监听和处理**: 在图片查看器中,可能会有许多事件监听器,如点击事件、滚动事件等。ActionScript的addEventListener...
在标签中提到的"文件上传"和"图片上传",这两个概念在实际操作中并无太大区别,都是指通过网络将本地文件传输到服务器的过程。"小例子"表明这是一个教学或演示性质的项目,可能只包含基本功能,用于学习和理解图片...
Flex是一款强大的RIA(富互联网应用)开发工具,它基于ActionScript编程语言和Flash Player运行时环境,提供丰富的用户界面组件和交互体验。 在Flex中实现多文件上传,通常会涉及以下几个关键知识点: 1. **...
Flex3是Adobe Flex框架的一个版本,它提供了丰富的用户界面组件和ActionScript编程模型,用于构建富互联网应用程序(RIA)。而Java则在服务端提供稳定且强大的业务逻辑处理能力。 在Flex3中,文件上传主要通过Flash...
在文件上传场景中,Flex可以设计一个包含文件选择按钮和进度条的界面,用户可以选择本地文件并触发上传操作。 接下来,当用户点击上传按钮后,Flex会通过HTTP POST请求将文件数据发送到服务器端的Servlet。在...
Flex应用可以利用本地存储机制,如SQLite数据库或者XML文件,来保存用户的记事内容。 9. **样式和皮肤**:Flex支持样式和皮肤,开发者可以通过定义CSS样式来改变组件的外观,使应用符合特定的设计风格。 10. **...
在Flex中,我们可以使用各种组件来实现用户界面,其中包括文件上传功能。本项目提供了一个完整的Flex文件上传控件,且集成了Java服务端处理,允许用户上传文件到服务器,并能进行多文件或单文件选择,以及设置上传...
- 客户端接收文件流并保存为本地文件。 #### 四、代码解析 ##### 文件选择对话框 ```as3 private function openDaig():void { file.browse([filter]); file.addEventListener(Event.SELECT, selectHandle); ...
在Flex中,文件上传通常涉及到FileReference类,该类允许用户选择本地文件,并通过HTTP或FTP上传。开发者可能需要编写事件监听器来处理选择文件、开始上传、上传进度和完成上传等事件。 在使用这个Flex多文件上传...
而`up.htm`则可能包含一个用于文件上传的Flex组件,用户可以选择本地文件并提交到服务器。 `upload.php`是后端处理文件上传的脚本,通常会接收由FileReference.upload()发送的文件数据,并保存到服务器的特定目录。...
1. **用户界面**:在Flex中,通常会使用一个组件,如FileUpload控件,允许用户选择本地文件。用户点击按钮,系统弹出文件选择对话框,用户选取文件后,FileReference对象会被初始化。 2. **FileReference类**:这是...
FileReference是Flash Player提供的一个API,用于处理用户选择的本地文件。在Flex中,我们可以创建多个FileReference对象,每个对象对应用户选择的一个文件。当用户选择多个文件后,可以通过循环遍历这些对象来逐个...
在Flex中,文件系统的操作是通过File和FileStream类来实现的,这些类提供了对本地文件系统的访问和管理能力。 首先,我们要了解Flex中的File类。File类是Flex与本地文件系统交互的基础,它可以代表计算机上的任何...