首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

二个加载作用

2012-09-21 
2个加载作用第一话:加载Base64 encoded string通过加载Base64 string创建图片。没错,就像你看到的,加载一个

2个加载作用
第一话:加载Base64 encoded string

通过加载Base64 string创建图片。没错,就像你看到的,加载一个字符串也可以生成图片,当然不是说图片url是字符串(废话!),图片数据就在字符串中。

问题的关键是需要这么一个类Base64,它的converToByteArray方法可以把字符串转化为ByteArray,有了ByteArray数据,我们就可以生成图片了。

代码如下:



//http://www.motobit.com/util/base64-decoder-encoder.asp
//你可以在线把一张小图片转为base64 string,把字符串粘贴到这里赋值给变量str
//过些天做个有输入框的实例,可以把你得到的字符串粘到里面,生成图片
var str:String = "";
var byteArr:ByteArray = Base64.converToByteArray(str);
var loaderoader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.loadBytes(byteArr);
function onImageLoaded(e:Event):void{
        addChild(loader);
        trace(loader.width + " : " + loader.height);
}


第二话:简单渐进式加载图片类ByteLoader

上面只是为了给大家开开眼界,不表。你可能会说“我的目的很简单,我只是要加载一张图片,用渐进的方式边加载边显示,我可不知道哪里有一串字符串让我去加载。”

嗯,来看看这个类吧,ByteLoader继承Loader类,使用方法跟Loader类一样简单。

原理是:

用URLStream类去加载图片数据流,
然后用帧循环stream.readBytes(data, data.length)将数据读入ByteArray中;
同时在帧循环中卸载Loader中旧的数据,加载新的数据super.unload();super.loadBytes(data);
代码如下:

package {        import flash.events.EventDispatcher;        import flash.events.ProgressEvent;        import flash.events.Event;        import flash.utils.ByteArray;        import flash.net.URLStream;        import flash.net.URLRequest;        import flash.display.Loader;        public class ByteLoader extends Loader{                public var url:String;                public var data:ByteArray;                private var stream:URLStream;                public function ByteLoader(url:String = ""){                        if(url != ""){                                loadUrl(url);                        }                }                //加载                public function loadUrl(_url:String):void{                        url = _url;                        data = new ByteArray;                        stream = new URLStream;                        stream.load(new URLRequest(url));                        stream.addEventListener(Event.COMPLETE,completeFun);                        stream.addEventListener(ProgressEvent.PROGRESS,progressFun);                        addEventListener(Event.ENTER_FRAME,loaddata);                }                private function loaddata(e:Event):void{                        if (stream.bytesAvailable > 0){                                stream.readBytes(data, data.length);                        }                        if (data.length > 0){                                super.unload();                                super.loadBytes(data);                        }                }                //加载中                private function progressFun(erogressEvent):void{                        if(stream.bytesAvailable == 0) return;                        dispatchEvent(e);                        trace(e.bytesLoaded);                }                //加载完成                private function completeFun(e:Event):void{                        stream.removeEventListener(Event.COMPLETE,completeFun);                        stream.removeEventListener(ProgressEvent.PROGRESS,progressFun);                        dispatchEvent(e);                        this.closeStream();                }                //清除数据                public function closeStream():void{                        if (stream){                                if (stream.connected) stream.close();                        }                        if (hasEventListener(Event.ENTER_FRAME)){                                removeEventListener(Event.ENTER_FRAME, loaddata);                        }                }        }}
1 楼 273611924 2012-01-04   请教一下
我如何把加载的图片显示到到界面上?

热点排行