2010-01-12 3 views
1

J'ai un problème étrange. Je peux obtenir Event.COMPLETE au feu quand je misAdobe Flex: Event.COMPLETE pour l'image ne se déclenche pas lorsque l'image est chargée depuis Bitmap

image.source = byteArray; 

MAIS

Quand je Manipulez le byteArray - convertir en bitmap et utiliser image.source ou image.load pour le charger, le bitmap devient chargé correctement dans le composant Image; MAIS Event.COMPLETE ne se déclenche jamais. Quel pourrait être le problème ici? J'ai ajouté une liste d'événements complète aussi! Ma source est la suivante:

   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! 

Merci Subrat

Répondre

2

Ainsi la classe en jeu ici est SWFLoader (image étend SWFLoader). Si vous avez passé dans le ByteArray ou une URL, il ajoute l'écouteur approprié. Ce que vous avez fait est alimenté par un bitmap, qui est un objet d'affichage. Voici le code important chargement d'un bitmap dans une image:

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

une 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] 

Ainsi, vous obtenez l'essentiel ici. Ne le convertissez pas en Bitmap et vous obtiendrez votre événement complet. Vous pouvez également ajouter ADDED_TO_STAGE à votre bitmap.

+1

Merci pour votre réponse Joel. Je charge l'image à partir de FileReference.data ByteArray en utilisant FileReference.load, donc je n'ai pas d'autre choix que d'utiliser ByteArray. Cependant, j'ai écouté l'événement ADDED_TO_STAGE sur le bitmap à la place et cela a fonctionné comme un charme! Merci! –

+0

vous pouvez utiliser le bitmapdata avec image.load et il déclenchera l'événement complet. Le lancer vers un bitmap est l'endroit où il l'ajoute simplement comme un enfant à la place. –

+1

Vous êtes l'homme Joel! – infomaniac

Questions connexes