【问题标题】:DisplayObject snapshot in flex 3flex 3 中的 DisplayObject 快照
【发布时间】:2009-07-09 11:53:15
【问题描述】:

我正在用 flex 创建一个可视化编辑器,需要让用户将他们的项目导出为图像格式。但是我有一个问题:画布的大小是固定的,当用户添加超出这些大小的元素时,添加了一些滚动条。用户继续从事该项目。但是当他想拍摄画布的快照时,他只需使用滚动条获取画布的可见部分。如何获取全尺寸画布的图像?

我找到的唯一解决方案是检查画布子对象的位置和大小并调整它以适应它们。然后拍摄并调整大小。但它嗯......我觉得太复杂了。有没有一些“简单的方法”?

<?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>

【问题讨论】:

    标签: apache-flex flash actionscript-3


    【解决方案1】:

    我会将一个容器放入可滚动画布中,它会根据其中的对象调整它的大小...甚至 UIComponent 也可以做到这一点...然后对该容器进行快照...画布仅添加滚动条,可以这么说......

    问候

    back2dos

    【讨论】:

      【解决方案2】:

      我找到了解决办法

      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>
      

      【讨论】:

        【解决方案3】:

        krishna:确保在构建路径中以 Flash Player 10 为目标。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          相关资源
          最近更新 更多