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)