Почему объекты Loader уничтожают bitmapdata draw () ;? - PullRequest
0 голосов
/ 27 марта 2012

Код ниже представляет собой простую программу добавления и сохранения.Вы нажимаете кнопку addButton, чтобы добавить содержимое на холст, а затем нажимаете кнопку exportButton, чтобы сохранить изображение холста в его текущем состоянии на рабочем столе.Этот код прекрасно работает, когда я добавляю на холст объекты круга, которые рисуются на холсте.Проблема заключается в том, что я пытаюсь загрузить .png в холст.Как только загруженный контент добавляется на холст, exportButton перестает работать все вместе и больше не отвечает.Что заставляет загруженный контент нарушать код?

** Данный пост был отредактирован по состоянию на 30 марта 2012 года. Ниже приведен рабочий код *

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 Ответ

1 голос
/ 27 марта 2012

Проблема может быть в междоменных проблемах безопасности. Если вы загружаете с сайта, отличного от вашего, убедитесь, что у него есть политика междоменных доменов по адресу domain.com/crossdomain.xml. Также установите LoaderContext (второй аргумент загрузки). Примерно так: loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true)); В противном случае вы можете загружать изображения с других сайтов, но не иметь доступа к фактическим bitmapData, что требуется для draw ().

Кроме того, вы должны установить отладочный плеер хотя бы на один браузер, запустить его там и посмотреть, есть ли ошибки.

...