0

在过去的几个小时里,我一直在研究如何在 UILoader 中添加 UILoader 并保存 UILoader 的所有内容。我有两个 UILoader 实例(loader_inner 和 loader_outer),它们都是使用 UILoader 组件手动放置的。代码是这样的:

loader_inner.load(new URLRequest("background_1.jpg"));
loader_outer.load(new URLRequest("rabbit.jpg"));
loader_outer.addChild(loader_inner);
var bitmapData:BitmapData = new BitmapData(loader_outer.width,loader_outer.height);
bitmapData.draw(loader_outer);
var jpgencoder:JPGEncoder = new JPGEncoder(100);
var mybyte:ByteArray = jpgencoder.encode(bitmapData);
var myfile:FileReference = new FileReference();
myfile.save(mybyte,"test.jpg");

问题是在保存过程中,我只能看到文件中的白色图像,而看不到两个内容。我期望图像文件中有一个带有兔子的背景,它恰好放置在工作空间中手动绘制的两个组件上。

4

1 回答 1

1

UILoader.load是一个异步动作。因此,您正试图在加载器实际有机会加载图像之前将其绘制到位图。您将需要监听COMPLETE内部和外部加载器上的事件:

import com.adobe.images.JPGEncoder;
import flash.display.Bitmap;
import flash.events.Event;

loader_inner.addEventListener(Event.COMPLETE, onLoadComplete);
loader_outer.addEventListener(Event.COMPLETE, onLoadComplete);
loader_inner.load(new URLRequest("background_1.jpg"));
loader_outer.load(new URLRequest("rabbit.jpg"));
loader_outer.addChild(loader_inner);

function onLoadComplete(e:Event):void 
{
    // check to make sure that *both* loaders have fully loaded
    if(loader_inner.percentLoaded && loader_outer.percentLoaded)
    {
        var bitmapData:BitmapData = new BitmapData(loader_outer.width,loader_outer.height);
        bitmapData.draw(loader_outer);
        var jpgencoder:JPGEncoder = new JPGEncoder(100);
        var mybyte:ByteArray = jpgencoder.encode(bitmapData);
        var myfile:FileReference = new FileReference();
        myfile.save(mybyte,"test.jpg"); 
    }
}
于 2014-12-12T15:44:14.323 回答