Bitmap görüntülerin senkronize olmayan kod çözme işlemi

Flash Player 11 ve üstü, Adobe AIR 2.6 ve üstü

Bitmap görüntüleriyle çalışırken uygulamanızın algılanan performansını arttırmak için bitmap görüntülerini senkronize olmayan kod çözme işleminden geçirip yükleyebilirsiniz. Çoğu kez bitmap görüntüsünün senkronize olmayan kod çözme işlemi, senkronize kod çözme işlemiyle aynı süreyi alabilir. Ancak bitmap görüntüsü, ilgili Loader nesnesi COMPLETE olayını göndermeden önce, ayrı iş parçacıkları içine kodu çözülmüş olarak girerler. Bu nedenle daha büyük görüntüleri yükledikten sonra senkronize olmayan bir şekilde kod çözme işleminden geçirebilirsiniz.

flash.system paketindeki ImageDecodingPolicy sınıfı, bitmap yükleme şemasını belirlemenizi sağlar. Varsayılan yükleme şeması senkronizedir.

Bitmap Kod Çözme İlkesi

Bitmap Yükleme Şeması

Açıklama

ImageDecodingPolicy.ON_DEMAND

Eşzamanlı

Görüntü verisine erişildiğinde yüklenen görüntülerin kodu çözülür.

Daha küçük görüntülerin kod çözme işlemi için bu ilkeyi kullanın. Bu ilkeyi ayrıca uygulamanız karmaşık efektlere ve geçişlere dayanmadığı zaman kullanabilirsiniz.

ImageDecodingPolicy.ON_LOAD

Senkronize olmayan

Yüklenen görüntülerin kodu, COMPLETE olayı gönderilmeden önce yükleme sırasında çözülür.

Daha büyük görüntüler için idealdir (10MP'den daha büyük). Sayfa geçişleri olan AIR temelli mobil uygulamalar geliştirirken, uygulamanızın algılanan performansını geliştirmek için bu bitmap yükleme ilkesini kullanın.

Not: Yüklenen dosya bitmap görüntüsüyse ve kullanılan kod çözme ilkesi ON_LOAD ise görüntü, COMPLETE olayı gönderilmeden önce senkronize olmayan kod çözme işleminden geçirilir.

Aşağıdaki kodlar ImageDecodingPolicy sınıfının kullanımını göstermektedir:

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);

Buna rağmen Loader.load() ve Loader.loadBytes() yöntemleriyle ON_DEMAND kod çözme işlemini kullanabilirsiniz. Ancak, argüman olarak LoaderContext nesnesini alan diğer tüm yöntemler, iletilen ImageDecodingPolicy değerini yok sayar.

Aşağıdaki örnek bir bitmap görüntüsünün senkronize ve senkronize olmayan kod çözme işlemleri arasındaki farkı göstermektedir:

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"); 
        } 
    } 
}

Farklı kod çizme ilkelerinin etkilerinin gösterimi için bkz. Thibaud Imbert: Asynchronous bitmap decoding in the Adobe Flash runtimes (Adobe Flash Çalışma Zamanlarında Senkronize Olmayan Bitmap Kodu Çözme İşlemi)