您的位置:首页 > 其它

URLStream,URLLoader和Loader

2009-01-06 22:06 302 查看
URLSteam读取文本文件可以支持多种编码

URLLoader如果遇到乱码,则可以转换(就像上篇说的利用标准的xml格式Excle可以解决乱码问题就是基于这里):

var ba:ByteArray = new ByteArray;

ba.writeBytes((event.target as URLLoader).data);

ba.position = 0;

//假如记载的是xml文档

var xml:XML = XML(ba.readMultiByte(ba.length, "GBK"));

loader用于加载外部的图片文件,SWF文件等。我之前在一个air里面用到它来上载图片,并且要生成一个缩略图,实现代码如下:

//import的相关

import mx.events.CloseEvent;

import flash.geom.Matrix;

import mx.graphics.codec.JPEGEncoder;

import mx.graphics.codec.PNGEncoder;

import mx.controls.Image;

import mx.controls.Alert;

import mx.utils.ArrayUtil;

import mx.collections.ArrayCollection;

import mx.formatters.NumberFormatter;

import mx.messaging.AbstractConsumer;

//压缩小图的相关信息信息

private var SmallPicSize:int = 80;

//保存相片的扩展名列表

private static const EXT_JPEG:String = "jpg";

private static const EXT_PNG:String = "png";

public function browseAndUpload():void

{

var FileToOpen:File = File.documentsDirectory;

var txtFilter:FileFilter = new FileFilter("jpg,png","*.jpg;*png;");

FileToOpen.browseForOpen("Open", [txtFilter]);

FileToOpen.addEventListener(Event.SELECT,FileToOpenSelected);

}

//当上载的相片被打开后,就进行上载操作

private function FileToOpenSelected(objEvent:Event):void

{

var OrgImgPath:String = File(objEvent.currentTarget).nativePath;

try

{

var orgFile:File = new File(OrgImgPath);

//获取一个随机的图片名称

var curPicName:String = "TestUploadPic."+orgFile.extension;

//假如我们把图片的大图片放到项目的/upload/big/文件夹下

var bigImgFile:File = new File(File.applicationDirectory.nativePath+"/upload/big/"+curPicName);

orgFile.copyTo(bigImgFile);

//获取原图的bitmap信息,然后重构一个小图放到temp/small/文件夹下面

var loader:Loader = new Loader();

//使用内联函数在事件中传递参数

var mySpecialObject:Object = {NewImgName:curPicName,NewImgExt:orgFile.extension};

//注意是loader.contentLoaderInfo

loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function (e:Event) : void {loadComplete(e,mySpecialObject);});

loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadError);

//加载原图

var request:URLRequest = new URLRequest(orgFile.nativePath);

loader.load(request);

}

catch(er:Error)

{

Alert.show(er.message);

}

}

//在上载的过程中把原图也load进了内存,主要目的是用原图来生成一个小图,load这个动作完成后的处理方法

public function loadComplete(event:Event,objSpecial:Object):void

{

try

{

if(objSpecial != null && objSpecial.NewImgName.toString() != "")

{

var loader:Loader = Loader(event.target.loader);

var BigBitmapdata:BitmapData = Bitmap(loader.contentLoaderInfo.content).bitmapData;

var myscale:Number = 1.0;

if(BigBitmapdata.width > 120 || BigBitmapdata.height > 100)

{

if(BigBitmapdata.width > BigBitmapdata.height)

{

myscale = 120/BigBitmapdata.width;

}else

{

myscale = 100/BigBitmapdata.height;

}

}

//创建新转换矩阵

var m:Matrix = new Matrix();

m.scale(myscale,myscale);

var SmallBitmapdata:BitmapData = new BitmapData(BigBitmapdata.width*myscale,BigBitmapdata.height*myscale,BigBitmapdata.transparent,0xFFFFFFFF);

SmallBitmapdata.draw(BigBitmapdata,m);

//相片的Bytearray

var imgByteArray:ByteArray;

switch(objSpecial.NewImgExt.toString())

{

case EXT_JPEG:

var jpgenc:JPEGEncoder = new JPEGEncoder(80);

imgByteArray = jpgenc.encode(SmallBitmapdata);

break;

case EXT_PNG:

var pngenc:PNGEncoder = new PNGEncoder();

imgByteArray = pngenc.encode(SmallBitmapdata);

break;

}

//假如我们把图片的大图片放到项目的/upload/small/文件夹下

var smallFile:File = new File(File.applicationDirectory.nativePath+"/upload/small/"+objSpecial.NewImgName.toString());

var fs:FileStream = new FileStream();

try{

fs.open(smallFile,FileMode.WRITE);

fs.writeBytes(imgByteArray);

fs.close();

}catch(e:Error){

Alert.show(e.message);

}

//释放BitmapData所占用的内存(很重要)

BigBitmapdata.dispose();

SmallBitmapdata.dispose();

}

}

catch(err:Error)

{

Alert.show("生成小图片出错.");

}

}

//当load原图的时候出错的处理方法

public function loadError(event:IOErrorEvent):void

{

Alert.show("上载的图片源:"+Loader(event.target.loader).contentLoaderInfo.loaderURL.toString()+"不存在,无法生成小图");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: