Снимок DisplayObject в flex 3 - PullRequest
0 голосов
/ 09 июля 2009

Я создаю визуальный редактор на flex и должен позволить пользователям экспортировать свои проекты в формат изображений. Но у меня есть одна проблема: размер холста фиксирован, и когда пользователь добавляет элемент, который выходит за эти размеры, добавляются полосы прокрутки. И пользователь продолжает работать над проектом. но когда он хочет сделать снимок холста, он просто получает видимую часть холста с полосами прокрутки. как получить изображение полноразмерного холста?

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
    <![CDATA[
        import mx.graphics.ImageSnapshot;

        private function SnapshotButtonHandler():void
        {
            var snapshot:ImageSnapshot = ImageSnapshot.captureImage(AppCanvas);
            var file:FileReference = new FileReference();
            file.save(snapshot.data, "canvas.png");
        }
    ]]>
</mx:Script>
<mx:Canvas id="AppCanvas" width="800" height="300" backgroundColor="0xFFFFFF">
    <mx:Box x="750" y="100" width="100" height="100" backgroundColor="0xCCCCCC" />
</mx:Canvas>
<mx:Button id="SnapshotButton" label="take snapshot" click="SnapshotButtonHandler()" /> 
</mx:Application>

Ответы [ 3 ]

0 голосов
/ 09 июля 2009

Решение, которое я нашел

BaseCanvas - холст с фиксированной высотой и шириной EditCanvas - динамический холст, параметры которого зависят от его дочерней позиции.

Снимок берется из EditCanvas. Здесь часть кода

private function SnapshotButtonHandler():void
{
    var snapshot:ImageSnapshot = ImageSnapshot.captureImage(EditCanvas);
    var file:FileReference = new FileReference();
    file.save(snapshot.data, "canvas.png");
}
private function ResizeCanvas():void
{
    for each (var child:* in AppCanvas.getChildren())
    {
        if ((child.x + child.width) > AppCanvas.width)
            AppCanvas.width = child.x+child.width;
        if ((child.y + child.height) > AppCanvas.height)
            AppCanvas.height = child.y+child.height;
    }
}

<mx:Canvas id="BaseCanvas" width="300" height="200">
    <mx:Canvas id="EditCanvas" width="300" height="200" backgroundColor="0xFFFFF0" horizontalScrollPolicy="off" verticalScrollPolicy="off"/>
</mx:Canvas>
0 голосов
/ 12 ноября 2009

Кришна: убедитесь, что вы нацелены на flash player 10 на вашем пути сборки.

0 голосов
/ 09 июля 2009

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

Greetz

back2dos

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