Adobe Flex: Event.COMPLETE per l'immagine non si attiva quando l'immagine caricata da bitmap
-
20-09-2019 - |
Domanda
Ho un problema strano. Posso ottenere Event.COMPLETE al fuoco quando ho impostato
image.source = byteArray;
MA
Quando ho manipolare il ByteArray - convertirla in bitmap e utilizzare image.source o image.load per caricarlo, la bitmap viene caricata correttamente nel componente Immagine; MA Event.COMPLETE non si attiva mai. Quale potrebbe essere sbagliato? Ho aggiunto un Lister evento per una completa troppo! La mia fonte è il seguente:
var bmp:Bitmap = scaleBitmapData(bitmapData,280,220);
imgPreview.addEventListener(Event.COMPLETE,onPreviewImageCompleted); // never fires
imgPreview.visible = false;
imgPreview.load(bmp); // does not work with .source either; image is displayed but Event.Complete never fires!
Grazie Subrat
Soluzione
Quindi, la classe in gioco qui è SWFLoader (immagine si estende SWFLoader). Se avete passato nel ByteArray o un URL di quanto non aggiunge l'ascoltatore appropriata. Quello che hai fatto è alimentato una bitmap, che è un oggetto di visualizzazione. Ecco il codice importante che sta caricando una bitmap in un'immagine:
else if (classOrString is DisplayObject)
{
contentHolder = child = DisplayObject(classOrString);
addChild(child);
contentLoaded();
}
ByteArray:
else if (byteArray)
{
loader = new FlexLoader();
contentHolder = child = loader;
addChild(child);
loader.contentLoaderInfo.addEventListener(
Event.COMPLETE, contentLoaderInfo_completeEventHandler);
loader.contentLoaderInfo.addEventListener(
Event.INIT, contentLoaderInfo_initEventHandler);
loader.contentLoaderInfo.addEventListener(
IOErrorEvent.IO_ERROR, contentLoaderInfo_ioErrorEventHandler);
loader.contentLoaderInfo.addEventListener(
Event.UNLOAD, contentLoaderInfo_unloadEventHandler);
// if loaderContext null, it will use default, which is AppDomain
// of child of Loader's context
loader.loadBytes(byteArray, loaderContext);
}
URL:
else if (url)
{
// Create an instance of the Flash Player Loader class to do all the work
loader = new FlexLoader();
contentHolder = child = loader;
// addChild needs to be called before load()
addChild(loader);
// Forward the events from the Flash Loader to anyone
// who has registered as an event listener on this Loader.
loader.contentLoaderInfo.addEventListener(
Event.COMPLETE, contentLoaderInfo_completeEventHandler);
loader.contentLoaderInfo.addEventListener(
HTTPStatusEvent.HTTP_STATUS, contentLoaderInfo_httpStatusEventHandler);
loader.contentLoaderInfo.addEventListener(
Event.INIT, contentLoaderInfo_initEventHandler);
loader.contentLoaderInfo.addEventListener(
IOErrorEvent.IO_ERROR, contentLoaderInfo_ioErrorEventHandler);
loader.contentLoaderInfo.addEventListener(
Event.OPEN, contentLoaderInfo_openEventHandler);
loader.contentLoaderInfo.addEventListener(
ProgressEvent.PROGRESS, contentLoaderInfo_progressEventHandler);
loader.contentLoaderInfo.addEventListener(
SecurityErrorEvent.SECURITY_ERROR, contentLoaderInfo_securityErrorEventHandler);
loader.contentLoaderInfo.addEventListener(
Event.UNLOAD, contentLoaderInfo_unloadEventHandler);
...[this goes on for awhile]
Così si ottiene il succo qui. Non convertirlo in un bitmap e avrai il tuo evento complete. Si potrebbe anche aggiungere ADDED_TO_STAGE al bitmap.