从加载器复制bitmapData

时间:2013-02-04 12:23:46

标签: ios actionscript-3 flash loader bitmapdata

我正在尝试使用Flash CS6为iOS开发应用程序。我使用装载机导入了图像。我现在希望能够创建加载器位图数据的重复实例并且一直在尝试:

var my_loader:Loader = new Loader();
        my_loader.load(new URLRequest("cats.jpg"));
        my_loader.scaleX = 0.2;
        my_loader.scaleY = 0.2;
        addChild(my_loader);

        var duplicationBitmap:Bitmap = new Bitmap(Bitmap(my_loader.content).bitmapData);
        duplicationBitmap.x = 300;
        duplicationBitmap.y = 300;
        addChild(duplicationBitmap);

不幸的是,当我测试代码时,它不起作用。我得到了初始加载的图像,但没有重复,我也得到输出错误:

TypeError:错误#1009:无法访问空对象引用的属性或方法。     在Main()

非常感谢任何想法。

2 个答案:

答案 0 :(得分:2)

Bitmap(my_loader.content)是一个DisplayObject,而不是Bitmap,它可以为您提供nullpointer错误。 要复制bitmapData,您应该使用BitmapData。clone()。

答案 1 :(得分:1)

当加载程序初始化时,您可以将加载器绘制到BitmapData对象,然后只需使用它在加载程序完成时创建所需数量的Bitmap对象。

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.events.Event;

var loaderBitmapData:BitmapData;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitEventHandler);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteEventHandler);
loader.load(new URLRequest("eXO-01.png"));

function loaderInitEventHandler(event:Event):void
{
    loader.contentLoaderInfo.removeEventListener(Event.INIT, loaderInitEventHandler);

    loaderBitmapData = new BitmapData(event.target.width, event.target.height);
    loaderBitmapData.draw(event.target.loader as Loader);
}

function loaderCompleteEventHandler(event:Event):void
{
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderCompleteEventHandler);

    createBitmaps();
}

function createBitmaps():void
{
    var image1:Bitmap = new Bitmap(loaderBitmapData);
    image1.scaleX = image1.scaleY = 0.2;

    var image2:Bitmap = new Bitmap(loaderBitmapData);
    image2.scaleX = image2.scaleY = 0.4;
    image2.x = image2.y = 100;

    addChild(image1);
    addChild(image2);
}