1

奇妙な問題があります。設定すると 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!

ありがとうサブラット

4

1 に答える 1

2

したがって、ここで使用するクラスは SWFLoader です (イメージは SWFLoader を拡張します)。ByteArray または URL を渡すと、適切なリスナーが追加されます。あなたが行ったことは、表示オブジェクトであるビットマップを供給したことです。Bitmap を Image にロードする重要なコードは次のとおりです。

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

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]

ここで要点がわかります。それをビットマップに変換しないでください。完全なイベントが得られます。Bitmap に ADDED_TO_STAGE を追加することもできます。

于 2010-01-12T04:33:28.007 に答える