2010-01-12 20 views
1

我有一個奇怪的問題。我能得到Event.COMPLETE火當我設置Adob​​e Flex:Event.COMPLETE for Image在從位圖加載圖像時不會觸發

image.source = byteArray; 

當我操縱的ByteArray - 將其轉換爲位圖和使用image.source或image.load加載它,位圖被加載正確地放入Image組件中;但是Event.COMPLETE從不會觸發。這裏可能有什麼問題?我已經添加了一個完整的事件列表器!我的來源如下:

   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! 

感謝 Subrat

回答

2

所以在遊戲類在這裏的SWFLoader(圖片延伸的SWFLoader)。如果你傳入了ByteArray或者一個url而不是它添加了合適的監聽器。你所做的是給它一個位圖,它是一個顯示對象。下面是加載位圖到圖像中的重要代碼:

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

一個網址:

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] 

所以,你在這裏得到的要點。不要將它轉換爲位圖,你會得到完整的事件。您也可以將ADDED_TO_STAGE添加到您的位圖。

+1

感謝您的回答喬爾。我使用FileReference.load從FileReference.data ByteArray加載圖像,所以我別無選擇,只能使用ByteArray。但是,我聽取了位圖上的ADDED_TO_STAGE事件,它的工作方式就像一個魅力!謝謝! – 2010-01-12 06:21:54

+0

你可以在image.load中使用bitmapdata,它會觸發整個事件。將它轉換爲位圖就是它只是把它作爲一個孩子添加的地方。 – 2010-01-12 06:29:59

+1

你是男人喬爾! – infomaniac 2011-02-17 10:26:06