【问题标题】:Adobe Flex: Event.COMPLETE for Image does not fire when image loaded from BitmapAdobe Flex:从位图加载图像时不会触发 Event.COMPLETE for Image
【发布时间】:2010-01-12 04:12:39
【问题描述】:

我有一个奇怪的问题。当我设置时,我可以让 Event.COMPLETE 触发

image.source = byteArray;

但是

当我操作 byteArray - 将其转换为 Bitmap 并使用 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!

谢谢 子类

【问题讨论】:

    标签: apache-flex flex3 flex4


    【解决方案1】:

    所以这里使用的类是 SWFLoader(图像扩展 SWFLoader)。如果您传入 ByteArray 或 url,则它会添加适当的侦听器。你所做的是给它一个位图,它是一个显示对象。这是将位图加载到图像中的重要代码:

     else if (classOrString is DisplayObject)
     {
         contentHolder = child = DisplayObject(classOrString);
         addChild(child);
         contentLoaded();
     }
    

    字节数组:

    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 添加到您的位图中。

    【讨论】:

    • 感谢乔尔的回答。我正在使用 FileReference.load 从 FileReference.data ByteArray 加载图像,所以我别无选择,只能使用 ByteArray。然而,我在位图上听了 ADDED_TO_STAGE 事件,它就像一个魅力!谢谢!
    • 您可以将 bitmapdata 与 image.load 一起使用,它将触发 complete 事件。将其转换为位图只是将其添加为子项。
    • Subrat Basnet!在“我在位图上听了 ADDED_TO_STAGE 事件”的情况下,您是完全正确的。当您需要使用 Bitmap 而不是 ByteArray 时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2014-02-19
    • 2013-07-28
    • 2020-05-04
    • 2021-05-30
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多