以下代码是一个简单的添加和保存程序。按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");
}
}
}
答案 0 :(得分:1)
问题可能是跨域安全问题。如果您从非自己的站点加载,请检查以确保它在domain.com/crossdomain.xml上具有跨域策略。同时设置LoaderContext(加载的第二个参数)。这样的事情:loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true));
否则,您可以从其他网站加载图像但不能访问draw()所需的实际bitmapData。
此外,您应该在至少一个浏览器上安装调试播放器并在那里运行它,看看是否有任何错误。