Cuando se trabaja con imágenes de mapa de bits, se puede descodificar de forma asíncrona y cargar imágenes de mapa de bits con el fin de mejorar el rendimiento percibido de la aplicación. La descodificación de una imagen de mapa de bits puede tardar el mismo tiempo que de la descodificación sincrónica de imágenes en muchos casos. Sin embargo, la imagen de mapa de bits se descodifica en un subproceso independiente antes de que el objeto
Loader
asociado envíe el evento
COMPLETE
. Por lo tanto, es posible descodificar de forma asíncrona imágenes de mayor tamaño tras cargarlas.
La clase
ImageDecodingPolicy
del paquete
flash.system
, permite especificar el esquema de carga de mapa de bits. El esquema de carga predeterminado es sincrónico.
Política de descodificación de mapas de bits
|
Esquema de carga de mapas de bits
|
Descripción
|
ImageDecodingPolicy.ON_DEMAND
|
Sincrónico
|
Las imágenes cargadas se descodifican cuando se accede a los datos de la imagen.
Utilice esta política para descodificar imágenes más pequeñas. Esta política también se puede utilizar cuando la aplicación no confía en transiciones y efectos complejos.
|
ImageDecodingPolicy.ON_LOAD
|
Asincrónico
|
Las imágenes cargadas se descodifican durante la carta, antes de que se distribuya el evento
COMPLETE
.
Ideal para imágenes de mayor tamaño (superiores a 10 MP). Cuando desarrolle aplicaciones móviles basadas en AIR con transiciones de página, utilice esta política de carga de mapas de bits para que el rendimiento percibido de la aplicación sea mejor.
|
Nota:
si el archivo que se está cargando es una imagen de mapa de bits y la política de descodificación utilizada es
ON_LOAD
, la imagen se descodifica de forma asíncrona antes de que se distribuya el evento
COMPLETE
.
El siguiente código muestra el uso de la clase
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);
Aún se puede utilizar la descodificación
ON_DEMAND
con los métodos
Loader.load()
y
Loader.loadBytes()
. Sin embargo, todos los demás métodos que obtengan un objeto
LoaderContext
como argumento, omitirán todos los valores
ImageDecodingPolicy
transmitidos.
En el siguiente ejemplo se muestra la diferencia en la descodificación de una imagen de mapa de bits de forma sincrónica y asíncrona:
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");
}
}
}
Para ver una demostración del efecto de las distintas políticas de descodificación, consulte
Thibaud Imbert: Asynchronous bitmap decoding in the Adobe Flash runtimes