【问题标题】:Why do Loader objects kill bitmapdata draw();?为什么 Loader 对象会杀死 bitmapdata draw();?
【发布时间】:2012-03-27 05:33:08
【问题描述】:

下面的代码是一个简单的添加和保存程序。您按 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");
    }
}

}

【问题讨论】:

  • 你用调试器检查过吗?有没有崩溃?
  • 可能加载的内容被添加到导出按钮的顶部。您还应该使用调试器检查应用程序是否抛出错误。

标签: actionscript-3 loader bitmapdata


【解决方案1】:

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

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

【讨论】:

  • 我添加了新的 LoaderContext 并将 checkpolicyfile 设置为 true。这并没有解决问题,但是很好地阅读了这解决了一个不同的问题。我追踪了一系列动作,在将图像加载到舞台后,然后按下导出按钮,该过程在 draw() 函数处停止。还有一篇文章建议将 loader.content 加载到位图中
  • 感谢您的帮助,在大家的帮助下,我得到了一切正常工作。很确定这是加载程序上下文。再次感谢大家。下面列出了完整的代码。
猜你喜欢
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2014-11-26
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多