Adobe Flex: Event.COMPLETE per l'immagine non si attiva quando l'immagine caricata da bitmap

StackOverflow https://stackoverflow.com/questions/2046671

  •  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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top