[渐进式加载]大话Loader.loadBytes |
| [来源:www.adspark.org | 作者:Catfly | 时间:2010-02-01 | 点击: | 收藏本文 【大 中 小】] |
|
|
| 5uflash文章摘要:第一话:加载Base64 encoded string
通过加载Base64 string创建图片。没错,就像你看到的,加载一个字符串也可以生成图片,当然不是说图片url是字符串(废话!),图片数据就在字符串中。
问题的关键是需要这么一个类Base64,它的converToByteArray方法可以把字符串转化 |
第一话:加载Base64 encoded string 通过加载Base64 string创建图片。没错,就像你看到的,加载一个字符串也可以生成图片,当然不是说图片url是字符串(废话!),图片数据就在字符串中。 问题的关键是需要这么一个类Base64,它的converToByteArray方法可以把字符串转化为ByteArray,有了ByteArray数据,我们就可以生成图片了。 代码如下:
原文件出处:Loading Image using Loader.loadBytes()
- //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);
- }
- }
- }
- }
复制代码
第三话:更周详的渐进式加载类ProgressiveLoader 原文件出处:ProgressiveLoader 渐进式加载图像 这个类,核心跟我上面那个ByteLoader类是一样的。只是这个类作了更多的考虑,也重写了父类Loader的几个方法。原文有个实例,大家可以去看看。 原代码,好长啊!自己下载吧。 Base64类也有得下载!
|
|
| 文章如果有错误或者缺少文件,请发邮件提交给我们 |
|
|
|
|
|
|
| >>> 最新评论:(共有 0 位网友发表了评论) 查看所有评论 |
|
|
| 发表评论 |
|
| ·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂 |
| ·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任 |
| ·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据 |
| ·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为 |
|
|
|
 |
教程分类 |
|
|
|
|
|
|