PDA

Просмотр полной версии : Скриншот в AS2


bazic
14.05.2009, 21:28
Привет всем. Я новичек но уже долгое время бьюсь над проблемой создания скриншотов клипов через вэб-интерфейс.
(внешний класс и пхп часть не обсуждаем)

import flash.display.BitmapData;
import com.quasimondo.display.BitmapExporter;
var webcam:Camera = Camera.get();
image_mc.cam.attachVideo(webcam);
this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());
image_mc.loadMovie("http://test1.ru/screnshoter/flash/PHP/Creatures.swf");
var snapshot:BitmapData = new BitmapData(240,320,false);
BitmapExporter.gatewayURL = "http://test1.ru/screnshoter/flash/PHP/BitmapExporter.php";
snapshot.draw( image_mc);
BitmapExporter.saveBitmap(snapshot, "snapshot.png", "turboscan", 0 );

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

В принципе пробовал рисовать в созданном клипе , скринит нормально вместе с рисунком.
this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());
with (image_mc){ тут рисуем };

Что сделать чтобы скринил загруженный мувик ? Заранее спасибо.

wvxvw
14.05.2009, 21:56
1. Вы не дожидаетесь загрузки.
2. Не извесно, находится ли картинка в "доверенной" зоне или нет.
2. loadMovie - deprecated, используйте вместо него MovieClipLoader, особенно обратите внимание на checkPolicyFile свойство этого класса.

bazic
14.05.2009, 22:32
1. Вы не дожидаетесь загрузки.
2. Не извесно, находится ли картинка в "доверенной" зоне или нет.
2. loadMovie - deprecated, используйте вместо него MovieClipLoader, особенно обратите внимание на checkPolicyFile свойство этого класса.
Переписал п.3
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
this.onLoadStart = function(mc:MovieClip) {
trace(mc._url);
};
loader.loadClip("http://test1.ru/screnshoter/flash/PHP/Creatures.swf",_root.createEmptyMovieClip("image_mc",0));
все равно не работает, однако если snapshot.draw( image_mc ); запускать кнопкой а не автоматом скринит нормально, сл-но проблема в п.1. Подскажите как дождаться загрузки и запуска загружаемого ролика?

wvxvw
14.05.2009, 23:29
Ну так скриншот нужно делать в слушателе onLoadInit или после него (по времени).

bazic
14.05.2009, 23:45
Ну так скриншот нужно делать в слушателе onLoadInit или после него (по времени).

import flash.display.BitmapData;
import com.quasimondo.display.BitmapExporter;
var webcam:Camera = Camera.get();
image_mc.cam.attachVideo(webcam);
var snapshot:BitmapData = new BitmapData(240,320,false);
BitmapExporter.gatewayURL = "http://test1.ru/screnshoter/flash/PHP/BitmapExporter.php";

var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
this.onLoadStart = function(mc:MovieClip) {
trace("Загрузка из " + mc._url);
};
this.onLoadComplete = function(mc:MovieClip) {
trace("Загружен!");
};

this.onLoadInit = function(mc:MovieClip) {
trace("Запущен!");
snapshot.draw(image_mc);
BitmapExporter.saveBitmap(snapshot, "snapshot.png", "turboscan", 0 );

};
loader.loadClip("http://test1.ru/screnshoter/flash/PHP/Creatures.swf",_root.createEmptyMovieClip("image_mc",0));

function save() {
snapshot.draw(image_mc);
BitmapExporter.saveBitmap(snapshot, "snapshot.png", "turboscan", 0 ); };

save_btn.onPress = function() {
this._parent.save();
};


Все равно пустоту скринит, а при нажатии на кнопку нормально.

dimarik
15.05.2009, 00:02
Первый кадр загружаемого мувика содержит изображение? Попробуйте отложить снятие скриншота на один кадр.

bazic
15.05.2009, 00:08
Первый кадр загружаемого мувика содержит изображение? Попробуйте отложить снятие скриншота на один кадр.
Да содержит. Но скрин снимается буквально за милисикунды до того как он запустится. Я пробовал вместо роликов подгружать картинку, с ней все ок. Нужно как то остановить выполнение скрипта на 1 сек.

dimarik
15.05.2009, 00:43
Как успехи со снятием скрина на следующий после onLoadInit кадр?

bazic
15.05.2009, 00:59
Как успехи со снятием скрина на следующий после onLoadInit кадр?
А как снять на следующем кадре ?
И еще вопросик, на некоторые флэшки в FL2 трасировка постоянно выдает *** Security Sandbox Violation ***
SecurityDomain 'кекекеек.swf' tried to access incompatible context 'кекекеек.swf' что сильно тормозит выполнение скрипта

dimarik
15.05.2009, 01:20
this.onLoadInit = function(mc:MovieClip) {
this.loader.removeListener(this);
this.loader = null;

this.onEnterFrame = handler_onEnterFrame;
};



function handler_onEnterFrame():Void {
delete this.onEnterFrame;
trace("Запущен!");
snapshot.draw(image_mc);
BitmapExporter.saveBitmap(snapshot, "snapshot.png", "turboscan", 0 );
}
По второму вопросу: перестарались с изменением названий файлов. названия должны быть разные. хехе.
Почтайте про политики безопасности FP и crossdomain.xml в частности.

bazic
15.05.2009, 01:46
this.onLoadInit = function(mc:MovieClip) {
this.loader.removeListener(this);
this.loader = null;

this.onEnterFrame = handler_onEnterFrame;
};



function handler_onEnterFrame():Void {
delete this.onEnterFrame;
trace("Запущен!");
snapshot.draw(image_mc);
BitmapExporter.saveBitmap(snapshot, "snapshot.png", "turboscan", 0 );
}

Не помогает, хотя теперь скринятся простенькие (не нагруженные графой) ролики. Нужно побольше задерку сделать, а желательно с переменной.

Спасибо вам за помощь! Есть еще вопросик! загружаемому ролику можно как то подставить переменную которую он запрашивает у проигрывателя.

В некоторых флэшках FL2 стоит проверка девайса
displayDevice = substring(eval("/:$version"), 0, 2) == "FL" ? "phone" : "pc";
Можно загружаемому ролику подсунуть phone, даже если он запущен на PC

dimarik
15.05.2009, 02:47
this.onLoadInit = function(mc:MovieClip) {
this.loader.removeListener(this);
this.loader = null;

mc.onEnterFrame = handler_onEnterFrame;
};

function handler_onEnterFrame():Void {
trace('try');
if (this._currentframe <= 0 ) return;
delete this.onEnterFrame;
trace("Запущен!");
snapshot.draw(image_mc);
BitmapExporter.saveBitmap(snapshot, "snapshot.png", "turboscan", 0 );
}

А эти ролики случайно не грузят в себя внешнюю графику? Тогда вопрос о скринах приобретает другой ракурс.

bazic
15.05.2009, 11:46
А эти ролики случайно не грузят в себя внешнюю графику? Тогда вопрос о скринах приобретает другой ракурс.
Это к вопросу о "тяжелых" роликах или о подставе "phone" ?
В обоих случаях нет не грузят. Во втором вопросе проблема заключается в том что если ролик запущен на "pc" а не на "phone" то он выдает совсем другую анимацию. А в некоторых случая вообще не запускается, пишет например только для телефона c FL2.