flash ios 加载图片序列内存过大的解决方法
研究发现,如果直接用loader加载图片,然后在用bitmap生成图片,内存占用巨大,如果图片多了,那么放到移动设备肯定就会直接泪奔。
如果用 urlloader 来加载图片,获取图片的2进制数据,保存起来,内存占用很小。 我加载了50张图片,大小为1024*576像素,发现内存
只用了30-40M,比保存bitmapdata小得很多很多,如果放在 移动端,那么这内存 还是可以接受的,除非你真的用1000张图片,这是你就得分布加载了······
那么如何读取呢,我们可以用loader的 loadbytes方法来读取,但是要注意一点,在移动端,必须添加一个loaderContext,
并且设置 loaderContext.allowLoadBytesCodeExecution = true; 才能在移动端加载bytes图片
方法一:用ByteArray把文件读取出来再加载
//文件对象
var stream:FileStream = new FileStream(); stream.open(file, FileMode.READ); var bytes:ByteArray = new ByteArray; stream.readBytes(bytes, 0, stream.bytesAvailable); stream.close(); loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); var loaderContext:LoaderContext = new LoaderContext(); loaderContext.allowLoadBytesCodeExecution = true; loader.loadBytes(bytes,loaderContext);
代码:
package { import flash.display.Bitmap; import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.filters.ConvolutionFilter; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLLoaderDataFormat; import flash.utils.ByteArray; public class Main extends Sprite{ private var loader:URLLoader; public function Main():void{ loadImage("image.jpg"); } private function loadImage(_path:String ):void{ loader = new URLLoader; loader.dataFormat=URLLoaderDataFormat.BINARY ; loader.addEventListener (Event.COMPLETE , onImageLoaded); loader.load(new URLRequest (_path)); } private function onImageLoaded(e:Event):void { var _ba:ByteArray = e.target.data as ByteArray; var _l:Loader = new Loader; _l.contentLoaderInfo.addEventListener (Event.COMPLETE, onBytesLoaded); _l.loadBytes(_ba); //-------- 置空 ----------- loader.removeEventListener (Event.COMPLETE , onImageLoaded); loader = null; } private function onBytesLoaded(e:Event):void { var _bitmap:Bitmap = e.target.content as Bitmap; trace(_bitmap.width, _bitmap.height ); addChild (_bitmap ); // e.target.loader.contentLoaderInfo.removeEventListener (Event.COMPLETE, onBytesLoaded); } } }

浙公网安备 33010602011771号