为什么Loader对象会杀死bitmapdata draw();?

时间:2012-03-27 05:33:09

标签: actionscript-3 loader bitmapdata

以下代码是一个简单的添加和保存程序。按addButton将内容添加到画布,然后按exportButton将画布的当前状态图像保存到桌面。当我将圆形对象添加到绘制到画布的画布时,此代码可以正常工作。问题在于我尝试将.png加载到画布中。将加载的内容添加到画布后,exportButton将停止一起工作,不再响应。是什么导致加载的内容破坏代码?

**此版本已于2012年3月30日编辑,以下是工作代码*

public class Application extends MovieClip
{
    public var canvas:MovieClip = new MovieClip();
    public var addBtn:MovieClip = new MovieClip();
    public var exportBtn:MovieClip = new MovieClip();
    public var _content:BitmapData;

    public function Application()
    {
        canvas.graphics.beginFill(0x333333);
        canvas.graphics.drawRect(0,0,450,450);
        canvas.graphics.endFill();
        addChild(canvas);

        addBtn.graphics.beginFill(0x999999);
        addBtn.graphics.drawRect(0,0,50,50);
        addBtn.graphics.endFill();

        exportBtn.graphics.beginFill(0x999999);
        exportBtn.graphics.drawRect(0,0,50,50);
        exportBtn.graphics.endFill();

        canvas.x = stage.stageWidth / 2 - canvas.width;
        addBtn.x = exportBtn.x = canvas.x +(canvas.width +25);
        exportBtn.y = addBtn.height + 25;

        addBtn.addEventListener(MouseEvent.CLICK, addClick);
        exportBtn.addEventListener(MouseEvent.CLICK, exportClick);

        addChild(canvas);
        addChild(addBtn);
        addChild(exportBtn);
    }
    private function addClick(event:MouseEvent):void
    {
        var loader:Loader = new Loader();
        loader.load(new URLRequest("alphabet/a.png"));
        loader.x = Math.random() * canvas.width;
        loader.y = Math.random() * canvas.height;
        canvas.addChild(loader);
    }
    private function exportClick(event:MouseEvent):void
    {
        _content = new BitmapData(canvas.width,canvas.height);
        _content.draw(canvas);
        saveBitmap();
    }
    private function saveBitmap():void
    {
        var encodedContent:ByteArray = PNGEncoder.encode(_content);
        var fileWindow:FileReference = new FileReference();
        fileWindow.save(encodedContent, "Image_randomly.png");
    }
}

}

1 个答案:

答案 0 :(得分:1)

问题可能是跨域安全问题。如果您从非自己的站点加载,请检查以确保它在domain.com/crossdomain.xml上具有跨域策略。同时设置LoaderContext(加载的第二个参数)。这样的事情:loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true));否则,您可以从其他网站加载图像但不能访问draw()所需的实际bitmapData。

此外,您应该在至少一个浏览器上安装调试播放器并在那里运行它,看看是否有任何错误。