zoukankan      html  css  js  c++  java
  • FlashPlayer11 异步解码 Bitmap

    Flash Player 11引入了一个全新的功能是异步解码位图的功能,这个功能对某些类型的Flash应用会很有效,尤其是需要加载大分辨率的位图的相册或游戏会有显著效果,使用位图图像时,可以异步解码和加载位图图像,以改善应用程序的感知性能。在许多情况下,异步解码位图图像所需的时间可能和同步解码图像相同。但是,在关联的Loader对象发送COMPLETE事件之前,位图图像会在单独的线程中进行解码。因此,您可以在加载较大的图像后,对其进行异步解码。

    借助flash.system包中的ImageDecodingPolicy类,您可以指定位图加载方案。默认加载方案为异步。

    位图解码策略

    位图加载方案

    说明

    ImageDecodingPolicy.ON_DEMAND

    同步

    在访问图像数据时,对加载的图像进行解码。

    使用此策略可以解码较小的图像。如果您的应用程序不依赖复杂的效果或过渡,则也可以使用此策略。

    ImageDecodingPolicy.ON_LOAD

    异步

    在加载时,在调度COMPLETE事件之前对加载的图像进行解码。

    此策略是处理较大(大于 10 MP)图像的理想之选。当开发具有页面过渡效果的基于 AIR 的移动应用程序时,使用此位图加载策略可以改善应用程序的感知性能。

    注: 如果加载的文件是位图图像,并且使用的解码策略为ON_LOAD,则该图像将在COMPLETE事件调度之前进行异步解码。

    以下代码显示了ImageDecodingPolicy类的用法:

     
    var loaderContext:LoaderContext = new LoaderContext(); 
    loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD 
    var loader:Loader = new Loader(); 
    loader.load(new URLRequest("http://www.adobe.com/myimage.png"), loaderContext);

    您仍然可以通过Loader.load()Loader.loadBytes()方法使用ON_DEMAND解码。但是,所有其他使用LoaderContext对象作为参数的方法,将忽略传递的任何ImageDecodingPolicy值。

    下面的示例显示了同步和异步解码位图图像的差异:

    package 
    { 
        import flash.display.Loader;   
        import flash.display.Sprite;  
        import flash.events.Event; 
        import flash.net.URLRequest; 
        import flash.system.ImageDecodingPolicy; 
        import flash.system.LoaderContext; 
     
        public class AsyncTest extends Sprite 
        { 
            private var loaderContext:LoaderContext; 
            private var loader:Loader; 
            private var urlRequest:URLRequest;         
            public function AsyncTest() 
            { 
                //Load the image synchronously 
                loaderContext = new LoaderContext(); 
                //Default behavior. 
                loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_DEMAND;             
                loader = new Loader();     
                loadImageSync();                     
                 
                //Load the image asynchronously 
                loaderContext = new LoaderContext(); 
                loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD;             
                loader = new Loader(); 
                loadImageASync();     
            } 
             
            private function loadImageASync():void{ 
                trace("Loading image asynchronously...");             
                urlRequest = new URLRequest("http://www.adobe.com/myimage.png");     
                urlRequest.useCache = false; 
                loader.load(urlRequest, loaderContext);                     
                loader.contentLoaderInfo.addEventListener 
                    (Event.COMPLETE, onAsyncLoadComplete); 
            } 
             
            private function onAsyncLoadComplete(event:Event):void{             
                trace("Async. Image Load Complete"); 
            }     
         
            private function loadImageSync():void{             
                trace("Loading image synchronously...");             
                urlRequest = new URLRequest("http://www.adobe.com/myimage.png");     
                urlRequest.useCache = false; 
                loader.load(urlRequest, loaderContext); 
                loader.contentLoaderInfo.addEventListener 
                    (Event.COMPLETE, onSyncLoadComplete); 
            } 
             
            private function onSyncLoadComplete(event:Event):void{             
                trace("Sync. Image Load Complete"); 
            } 
        } 
    }
  • 相关阅读:
    Python字符串转码问题
    tcpip详解笔记(21) TCP的路径MTU探测与长肥管道
    sync,fsync,fdatasync,fflush
    tcpip详解笔记(22) telnet协议
    tcpip详解笔记(18)TCP的超时与重传
    tcpip详解笔记(16) TCP的交互数据流
    Get exception description and stack trace which caused an exception
    tcpip详解笔记(20) TCP的Keepalive定时器
    [转]应该知道的Linux技巧
    How to prettyprint JSON script?
  • 原文地址:https://www.cnblogs.com/fuland/p/4289743.html
Copyright © 2011-2022 走看看