最近做到公司的一个项目就是要在flex加载本地图片的时候判断图片的尺寸,目的就是为了对图片尺寸作出限制,原本是写Java的,现在flex不熟悉没办法还得硬着头皮上,就查找资料看flex是怎么获取信息的,熟悉flex的就别嫌弃我这么笨了啊!
先直接上代码:
<?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" creationComplete="init(event)">
<s:layout>
<s:VerticalLayout gap="5"/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
private var fr:FileReference;
private var imageType : FileFilter;
private var loader :Loader = new Loader();
private var bitmap : Bitmap;
protected function imageBut_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
fr.browse([imageType]);
}
protected function init(event:FlexEvent):void
{
// TODO Auto-generated method stub
fr = new FileReference();
imageType =new FileFilter("Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.jpeg;*.png");
fr.addEventListener(Event.SELECT,onSelect);
fr.addEventListener(Event.COMPLETE,completeHandler);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onCompleteHandler);
}
private function onSelect(event:Event):void{
fr.load();
}
private function onCompleteHandler(event:Event):void{
bitmap = Bitmap(loader.content);
ofId.text = "尺寸: "+"width:"+bitmap.width+" height:"+bitmap.height;
}
private function completeHandler(event:Event):void{
loader.loadBytes(fr.data);
imageid.source = fr.data;
nameId.text="名称"+fr.name;
sizeId.text ="大小"+ fr.size.toString();
}
]]>
</fx:Script>
<s:Button id="imageBut" click="imageBut_clickHandler(event)" label="加载图片"/>
<s:Image id="imageid" />
<s:Label id="nameId"/>
<s:Label id="sizeId"/>
<s:Label id="ofId"/>
</s:Application>
当组件加载完成进行初始化的时候,对数据文件添加监听,觉得为了自己方便,有必要将代码记录一遍。
每个FileReference对象都代码本地计算机上的一个数据文件,通过FileReference类的方法可以使应用程序本地加载或者保存数据文件,以及与远程服务器之间传输文件数据。其中包括browse()方法、upload()方法、download()方法、和save()方法。
1.browse()方法将打开一个对话框,提示用户选择一个或者多个要上传的文件,如果用户选择了一个或者多个,则创建了一个FileReference对象数组;
2.upload()方法可以将文件数据上传到远程服务器;
download()方法可以从服务器下载数据到本地,打开一个对话框,让用户选择要保存文件的位置,然后从服务器下载,将数据存储在新文件中;
3. load()使用browse()方法开始之前所选的文件中加载数据。知道browse()操作完成,即用户选择了文件,才能调用load()方法;
4.save()方法打开一个对话框,提示用户在本地文件系统上选择一个位置,然后将此文件数据保存到该指定位置;
其中代码中就用了browse()方法打开窗口让用户选择文件,load()方法就是让用户对本地文件进行访问。
FileReference类的属性包括了文件大小、类型、名称、创建者、创建日期和修改日期等信息,一般通过下面两种方式创建FileReference实例,
常见的就是NEW对象:
private var fr:FileReference = new FileReference();
在使用loader加载数据时候,添加监听事件时候,一定是要给contentLoaderInfo属性添加,而不是给loader对象添加事件
上面代码效果图: