Flex 3 - сохранение изображения компонента - PullRequest
2 голосов
/ 08 октября 2009

Я сейчас пытаюсь работать с функцией imageSnapshot в flex. Я долго искал, но не могу найти решение своей проблемы. Я хочу сделать скриншот одного из моих компонентов, чтобы зафиксировать окончательный вывод моей программы, так как простой "экран печати" обрезает некоторые выходные данные из-за прокрутки. Мой текущий код выглядит как -

<mx:ApplicationControlBar dock="true">
    <mx:Button label="Take snapshot of Profile" 
        click="takeSnapshot();" />
</mx:ApplicationControlBar> 

Что при вызове делает -

private function takeSnapshot(even:Event=null):void {
    var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(viewstack1);

Теперь я думаю, что это изображение того стека, который я хочу ... Но я не знаю, что делать отсюда! Разве нельзя теперь просто скопировать изображение в буфер обмена или создать новое окно в моем браузере с полным изображением внутри? Если у кого-то есть другой способ сделать это, предложения будут замечательными.

Спасибо за ваше время.

Ответы [ 2 ]

4 голосов
/ 08 октября 2009

Вы можете нарисовать стек просмотра в объект BitmapData и кодировать его в png, используя as3corelib . Что-то вроде:

var screenshotData : BitmapData = new BitmapData(viewstack1.width, viewstack1.height, true, 0x00000000);
screenshotData.draw(viewstack1);
var outputData:ByteArray = PNGEncoder.encode(screenshotData);
// Save outputData as a file to disk, send to webserver etc..

edit: Э-э, это, вероятно, смущает вас еще больше. Извини за это. ImageSnapshot имеет свойство под названием data, которое, как я предполагаю, дает вам тот же результат, что и этот. Вы можете сохранить его как файл на диск, используя flash.net.FileReference

2 голосов
/ 08 октября 2009

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

Все, что вам нужно добавить в код Антти, это:

var fr:FileReference = new FileReference();
var encoder:PNGEncoder = new PNGEncoder();

//Antti's code here

fr.save(outputData,"datagrid.jpg");

Откроется диалоговое окно сохранения файла.

Ура, Casp

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