`
阅读更多
第一话:加载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  
请教一下
我如何把加载的图片显示到到界面上?

相关推荐

    易语言150个加载gif图片

    2. **图像对象**:在程序界面设计阶段,创建一个图像控件,用于显示加载动画。 3. **加载动画**:编写代码,设置图像控件的图片源为对应的gif资源,并控制动画的播放。 4. **事件驱动**:通过事件驱动编程,例如在...

    IIS设置预加载详细说明文档

    二、IIS 8 及以上版本的预加载实现 在 IIS 8 及以上版本中,预加载功能已经内置在 IIS 中,不需要额外安装模块。可以直接在 IIS 控制台中进行预加载设定。在 IIS 8 中,应用程序池和网站是单独存在的,但是网站运行...

    linux内核模块加载顺序

    module_init宏的定义涉及到了多个层级的宏展开,其最终作用是在编译生成的目标文件.o中创建一个.initcall级别的section,这个section包含了模块初始化函数的地址。 接下来,我们需要关注的是内核模块加载顺序控制的...

    java类加载器

    类加载器的设计遵循双亲委派模型,它分为三个主要部分:启动类加载器、扩展类加载器和应用类加载器。 #### 二、类加载过程 类加载过程主要包括三个步骤: 1. **加载**:通过类的全限定名找到该类的二进制字节流。...

    85个web用动态加载图

    2. **旋转图标**:这类加载图常以一个旋转的图标或图形为主,如旋转的箭头、齿轮或环形结构。它们在内容不确定的加载时间中尤其常见,因为它们不承诺特定的完成时间。 3. **点动式加载**:由三个或更多的点组成,...

    magento图片延时加载插件

    这就是“magento图片延时加载插件”发挥作用的地方。 图片延时加载(也称为懒加载)是一种优化网页性能的技术,它只在用户滚动到图像所在的视口区域时才开始加载图片,而不是一次性加载所有图片。这种策略可以显著...

    同步加载JS文件Demo

    "init.js"的作用就像一个中央控制器,负责组织和调用其他必要的脚本。以下是一些可能实现的方法: 1. **动态`<script>`元素**:在"init.js"中,可以动态创建`<script>`元素,并设置其`src`属性为要加载的JavaScript...

    Java类加载器原理

    2. 主要的类加载器: - 引导(Bootstrap)类加载器:这是最基础的类加载器,由本地代码实现,负责加载JRE的基础类库,如rt.jar,它不直接暴露给开发者。 - 扩展(Extension)类加载器:由ExtClassLoader实现,加载...

    IE浏览器加载项管理工具

    **二、加载项管理工具的作用** 1. **查看加载项**:用户可以通过管理工具查看已安装的所有IE加载项,了解它们的名称、开发者、状态等信息。 2. **启用/禁用加载项**:如果发现某个加载项导致浏览器运行缓慢或者...

    struts2配置文件加载顺序

    理解这个加载顺序有助于我们更好地组织和管理Struts2应用的配置,避免重复配置,提高代码复用性,同时也有利于问题排查。例如,当一个Action没有按照预期执行时,我们可以检查是否因为配置冲突或者加载顺序错误导致...

    layui图片懒加载.txt

    2. **懒加载不起作用:** 检查是否正确引入了LayUI库,以及是否按照正确的格式调用了`flow.lazyimg`方法。 3. **兼容性问题:** LayUI支持大多数主流浏览器,但在某些老旧浏览器中可能会遇到兼容性问题。可以通过...

    网页常用loading 加载gif图片素材

    在网页设计中,"加载"(loading)是一个关键的用户体验元素,特别是在内容丰富的网页或需要时间来完全加载的页面上。加载gif图片是为用户提供视觉反馈的一种常见方式,表明页面内容正在加载,让用户知道他们需要等待...

    微信小程序实现自定义加载图标功能

    在教程中,定义了一个名为`circle`的动画,其作用是改变元素的透明度,从而产生渐变效果。 - 动画通过`animation`属性绑定到具体的元素上,其中可以设置动画的持续时间、速度曲线(如`linear`)和重复次数(如`...

    注册表删除IE加载项

    2. **HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Ext\Settings**:这个键则存储了当前用户的IE加载项设置。 ### 删除IE加载项的注册表方法 虽然可以通过IE的“管理加载项”界面来移除加载项,...

    Java的类加载器

    Java的类加载器是Java虚拟机(JVM)的核心组件之一...通过以上内容,我们可以了解到Java类加载器在Java程序运行过程中的关键作用,以及如何根据需求定制类加载器。理解这些概念对于开发高效、安全的Java应用至关重要。

    js加载广告 页面加载广告

    综上所述,JavaScript在加载广告方面起着关键作用,它使得广告能够动态、交互地展示,同时提供了优化加载速度、保障用户安全、适应不同设备和监测广告效果的多种可能性。对于网页开发者来说,理解和掌握这些知识点是...

    GIF动态加载效果效果

    GIF动态加载效果在此起到了很好的作用,它们可以是旋转的圈圈、上下滑动的条形、渐变填充的形状等,这些动态效果在加载过程中为用户提供了一种视觉反馈,增强了交互感。 60多款GIF动态加载效果效果的集合提供了丰富...

    加载动态图集锦

    在IT行业中,用户体验是至关重要的一个环节,而加载动态图在提升用户体验方面起着不可或缺的作用。"加载动态图集锦"这个主题涵盖了多种类型的加载动画,包括进度条、菊花(通常指的是菊花转圈加载图标)以及圆圈样式...

    安卓下拉加载更多,上拉加载

    - **作用**:当用户滚动到列表底部时,自动加载更多数据,常用于分页加载场景。 - **实现策略**:在ListView或RecyclerView中,可以通过监听滚动事件,判断是否到达底部,然后加载新的数据并添加到现有数据集中。 ...

Global site tag (gtag.js) - Google Analytics