bit.draw (stage, shiftOrigin) работает на Flash Player, но не работает в браузере; - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть код, который должен сохранить сцену в файл, но когда я нажимаю кнопку, которая запускает функцию, которая имеет этот код в браузере, она не работает. Окно с вопросом, где сохранить, не отображается.

private function cropAndSave():void
{
    var file:FileReference = new FileReference();
    var bit:BitmapData = new  BitmapData(bm.width, bm.height);

    var jpgEncoder:JPGEncoder = new JPGEncoder(95);
    var shiftOrigin:Matrix = new Matrix();

    var now:Date = new Date();
    var outputFileName:String = now.getTime()+"_scrapeenet";

    outputFileName += ".jpg";

    shiftOrigin.translate(-bm.x,-bm.y);
    bit.draw(stage, shiftOrigin);

    file.save(jpgEncoder.encode(bit),outputFileName);
}

На Flash Player это работает. Это также работает, если я поменяю "stage" на какое-нибудь название мувиклипа, например. Но мне нужно сохранить всю сцену, а не только видеоклип.

Это может быть ошибка.

Любой способ решить?

1 Ответ

1 голос
/ 15 февраля 2012

Справочные документы AS3 говорят о flash.net.FileReference, что:

Функции FileReference.upload (), FileReference.download (), FileReference.load () и FileReference.save () являются неблокирующими. Эти функции возвращаются после вызова, до завершения передачи файла. Кроме того, , если объект FileReference выходит из области действия, любая транзакция, которая еще не завершена для этого объекта, отменяется после выхода из области действия. Убедитесь, что ваш объект FileReference остается в области действия до тех пор, пока выгрузка ожидается, что загрузка, загрузка или сохранение продолжится.

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

В Flash Player этот метод можно успешно вызывать только в ответ на пользовательское событие (например, в обработчике события для щелчка мыши или события нажатия клавиши). В противном случае вызов этого метода приводит к тому, что Flash Player выдает исключение Error.

Ваш вставленный код не показывает это действие в результате MouseEvent или KeyboardEvent, поэтому сейчас не ясно, действуете ли вы на основе действий пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...