Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Полноэкранный снимок (Fullscreen Bitmap Draw = Error) (http://www.flasher.ru/forum/showthread.php?t=183364)

billion 20.08.2012 04:12

Полноэкранный снимок (Fullscreen Bitmap Draw = Error)
 
Как делать скриншот полноэкранной сцены???

В полноэкранном режиме выдаёт ошибку. И даже рекомендации этой самой ошибки не помогли.

Код AS3:

Security.allowDomain('*');
Security.allowInsecureDomain('*');
bd.draw(stage);

Код AS3:

SecurityError: Error #2121: Нарушение изолированной среды: BitmapData.draw: file:///Main.swf не может осуществить доступ к https://www.macromedia.com/support/flashplayer/sys/. Этого можно избежать посредством вызова Security.allowDomain.
        at flash.display::BitmapData/draw()


mayakwd 20.08.2012 10:32

Только что сделал тест, отрисовка работает:
Код AS3:

package {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.display.StageDisplayState;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.text.TextField;
 
        public class Test extends Sprite {
                private var tf : TextField;
 
                public function Test() {
                        tf = new TextField();
                        tf.text = "Hello";
                        tf.x = 10;
                        tf.y = 10;
                        addChild(tf);
 
                        if (!stage) {
                                addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
                        } else addedToStageHandler();
                }
 
                private function addedToStageHandler(event : Event = null) : void {
                        removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
 
                        stage.displayState = StageDisplayState.FULL_SCREEN;
                        stage.addEventListener(MouseEvent.CLICK, stageClickHandler);
                }
 
                private function stageClickHandler(event : MouseEvent) : void {
                        var bd : BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
                        bd.draw(null);
 
                        stage.displayState = StageDisplayState.NORMAL;
 
                        var bm : Bitmap = new Bitmap(bd);
                        addChild(bm);
                }
        }
}

Не могли бы вы уточнить:
1. Какая версия плеера используется для тестирования (версия, standalone/web plugin)
2. Загружается ли эта флешка в другую при тестировании (прелоадером, в качестве модуля)

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

zuxul 20.08.2012 10:35

Скорее всего, у Вас в рисуемых объектах есть картинки (или может быть swf-ка) с другого домена.
Если есть, то загружать их нужно в свой (можно, наверно, и дочерний) контекст безопасности с проверкой "политик" (checkPolicyFile = true)

billion 20.08.2012 19:25

до сцены путь пишу так:

Код AS3:

//код в mst классе
//public static var m:Object = FlexGlobals.topLevelApplication;
 
//а так уже вызываю из компонента
bd = new BitmapData(mst.m.stage.stageWidth, mst.m.stage.stageHeight);
bd.draw(mst.m.stage);
//bd.draw(stage); тоже пробовал

версия плеера 11.3
Код:

Download the Windows Flash Player 11.3 Plugin content debugger
(for Netscape-compatible browsers) (EXE, 9.94MB)
You have version 11,3,300,265 installed

нет. swf-ка одна. Main.swf.

с размером стэйджа разобрался. это не проблема. проблема сделать скриншот.

кстати у вас в коде почему то null на прорисовке.... это как? у меня ругается:

Код AS3:

ArgumentError: Error #2005: Неправильный тип параметра 0. Должен быть тип IBitmapDrawable.
        at flash.display::BitmapData/draw()

я так понимаю у меня ругается именно на кросс-политику. запускаю с диска с:

Код:

file:///C:/workspace/Flash/BAN3-2012-08-10/bin-debug/Main.html#
А плеер когда выходит в полноэкранный режим, то запускается отдельный процесс "Adobe Flash Player". Его прям видно в процессах. И как мне кажется между этим процессом и диском С конфликт.

Перепробовал почти всё. Файлы политик не пробовал использовать. Ещё вот так ругается:

Код:

*** Нарушение безопасности изолированной среды ***
SecurityError: Error #2121: Нарушение изолированной среды: BitmapData.draw: file:///C:/workspace/Flash/BAN3-2012-08-10/bin-debug/Main.swf
не может осуществить доступ к https://www.macromedia.com/support/flashplayer/sys/.
Этого можно избежать посредством вызова Security.allowDomain.SecurityDomain
"file:///C:/workspace/Flash/BAN3-2012-08-10/bin-debug/Main.swf" пытался получить доступ к контексту Player UI (интерфейс пользователя проигрывателя)

        at flash.display::BitmapData/draw()

а можно по-подробнее про файл политик? куда его класть и что в нём обязательно написать? примеры у меня есть.
дело в том что в полноэкранном режиме даже посмотреть не могу требует он этот файл или нет... смотрю через firebug (Firefox) . можкт другой инструмент использовать?

lvgrecords 20.08.2012 19:43

Цитата:

я так понимаю у меня ругается именно на кросс-политику
Именно, Вы наверное пробуете сделать скриншот когда на сцене находить мувик от Адобе ("Press Ecs to exit full screen mode"), а он как раз загружается с другого домейна.

Самый простой выход не ложить ничего на стейдж, тогда можно будет сделать скриншот с своей вьюшки(например главного клас, у Вас я так понял это "Main.as"), тойсть
bd.draw(mst.m);
а не
Цитата:

bd.draw(mst.m.stage);

billion 20.08.2012 19:57

точно! блин! не догадался подождать исчезновения этой надписи! :) спешил. ругалось именно на ("Press Ecs to exit full screen mode")!!!

слишком быстро тестил :)

вариант с главным приложением работает!

Код AS3:

bd = new BitmapData(mst.m.width, mst.m.height);
bd.draw(mst.m as DisplayObject);

Благодарю за помощь!
а то я уже обходные окольные пути разрабатывал. :)

Wolsh 21.08.2012 12:02

Цитата:

bd.draw(mst.m as DisplayObject);
К чему здесь кастинг? Да еще не в тот тип данных, который требует BitmapData#draw()?

billion 21.08.2012 16:44

а кастинг потому что главное приложение у меня типа Application и всё это сделано во Flash Builder 4.6.

и с чего вы взяли что не тот тип?

как написано в хелпе
Код:

BitmapData.draw(source:IBitmapDrawable, .....
а сам интефейс
Код:

IBitmapDrawable Implementors BitmapData, DisplayObject
так что всё ок.

alatar 21.08.2012 18:31

По этой же логике нет смысла кастить Application к DisplayObject, он является его наследником.

dimarik 21.08.2012 23:39

Кастить не надо [х]
Суетно все это. Оно там все до вас скастено.

lvgrecords
А вот про "Press Ecs to exit full screen mode" как https://www.macromedia.com/support/flashplayer/sys/ порадовали вы меня, аха. Разок встречал, но давно. Полез было в гуглю, но лениво стало. Поделитесь полезной ссылкой, как это чудо работает.

P/S/ Правильно сказано: не ложить [x]


Часовой пояс GMT +4, время: 00:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.