第一话:加载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 loader:Loader = 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类一样简单。
var bl:ByteLoader = new ByteLoader();
addChild(bl);
bl.loadUrl("big.jpg");
原理是:
- 用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(e:ProgressEvent):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类也有得下载
!
分享到:
相关推荐
flex 打开本地图片并进行显示 var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.onLoadByted);... loader.loadBytes(this.fileReference.data);
` 或 `loader.loadBytes(yourImageData);` 3. 添加事件监听器以跟踪加载进度和完成情况:`loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);` 4. 定义加载完成后的处理函数:`function ...
import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; ``` - 创建Loader对象并指定要加载的图片URL。 ```actionscript var loader:Loader = new Loader(); var ...
- 当使用Loader加载资源时,资源会被实例化,占用更多内存,因此需要权衡加载速度和内存管理。 - 对于大的或不常用的资源,考虑延迟加载或按需加载,以提高用户体验。 - 如果多个SWF共享同一个应用域,确保链接名的...
import flash.display.Loader; public class ByteArrayImage extends mx.controls.Image { private var _loader: Loader = new Loader(); public function ByteArrayImage(): void {} override protected...
我们可以使用`Loader`加载图片: ```actionscript private function onSelect(event:MediaEvent):void { var promise:MediaPromise = event.data as MediaPromise; _loader = new ExifLoader(); _loader....
要通过`ByteArray`播放MP3文件,我们首先需要创建一个包含MP3文件的SWF文件,然后使用`Loader.loadBytes()`方法来加载这个SWF文件。 ### 创建包含MP3的SWF文件 为了演示如何将MP3文件嵌入到SWF文件中,我们可以...
前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件… 当时还没有出as3的反...前台swf适用Loader.loadBytes方法显示主程序文件. 下面是测试的源程序: package { import flas
4. **loadBytes(bytes: ByteArray, context: LoaderContext = null)**:通过提供一个`ByteArray`对象来加载数据,这对于从内存中加载资源非常有用。 5. **unload()**:卸载当前Loader实例加载的数据,释放资源。 6...
在AS3中,我们通常使用`Loader` 类来加载SWF、图像、XML等资源。然而,`Loader` 默认情况下仅能加载与当前项目相同或更低版本的SWF。`ForcibleLoader` 类通过覆盖`Loader` 的某些关键方法,实现了对低版本SWF的转换...
但是,直接使用`loadBytes()`方法加载字体字节数组可能导致安全沙箱问题,因此需要在正确的位置和方式下进行操作。 `Main.as`和`FontLibrary.as`是两个关键的文件。`Main.as`通常作为主入口文件,负责初始化和协调...
`Loader.loadBytes()`方法接收`FileReference`对象的`data`属性(即用户选择文件的二进制数据),加载完成后,图片可以在舞台上进行展示。 4. **图片裁剪**:为了适应不同的头像尺寸要求,通常会添加裁剪功能。这...
要将`ByteArray`加载到内存,我们可以创建一个`BitmapData`实例,调用其`loadBytes()`方法,传入`ByteArray`对象。这样,图片数据就被加载到内存中,可供后续处理,如缩放、裁剪、滤镜效果等。 4. **性能优化**: ...
将图片数据保存为二进制后,可以使用Loader对象的loadBytes()方法加载这些数据。加载完成后,可以通过 addChild() 方法将其添加到舞台上显示。 7. **性能优化**: 二进制加载相比传统的URLLoader加载图片更高效,...
1. **加载媒体文件**:ActionScript 3.0中的`flash.net`包提供了`Loader`类,可以用来加载各种类型的二进制数据,包括音频和视频文件。通过`LoaderContext`,我们可以设置加载策略,如允许跨域访问或者指定安全沙箱...
These methods are Util.SaveString, Util.SaveBytes, Util.LoadString, and Util.LoadBytes. LINQPad's embedded ILSpy has now been updated to V4. You can now enable or disable compiler optimizations on a ...
有在LINQPad的的Util类新方法来加载/字符串或字节数组保存到一个中央计算机存储(查询之间共享)。这些方法Util.SaveString,Util.SaveBytes,Util.LoadString和Util.LoadBytes。 LINQPad的嵌入式ILSpy现在已经更新...
this._loader.loadBytes(byteArray,new LoaderContext(false,ApplicationDomain.currentDomain)); } 思路清晰,可以干代码,这里使用了易语言 导出文件 可以,再将其导入FFdec看看效果。解压后,开始找与通讯的...
1. 加载PBK文件:首先,你需要使用`loadBytes()`方法加载PBK文件内容,然后通过`Pixel Bender Loader`类解析这个字节数据。 2. 创建滤镜实例:解析完成后,你可以创建一个`Pixel Bender Filter`实例,传入解析出的...