【问题标题】:Unable to create snapshot of Canvas无法创建 Canvas 的快照
【发布时间】:2010-12-13 19:49:30
【问题描述】:

在我的应用程序中,画布对象的高度 = 90 像素和宽度 = 86400 像素(表示一天中的秒数 [60 * 60 * 24] )。画布是可滚动的,用户可以在其中添加或删除组件。

现在,我想要整个画布的快照并将其缩小到 910x30 的大小,以便在另一个画布中绘制快照。

谁能告诉我如何拍摄这么大的组件的快照?

我尝试在 BitmapData 对象中拍摄快照,但由于它的最大宽度为 2880,因此无法提供整个画布快照。

还有其他可能的想法吗,如果有请告诉我。

欢迎提出建议。

【问题讨论】:

  • 1 性别/像素?也许你的意思是 s/pixel?还是最多秒/像素?

标签: apache-flex components snapshot bitmapdata


【解决方案1】:

我还没有对此进行测试,但是如果您将 Bi​​tmapData 全部取消并直接从客户端计算机获取结果会怎样?像这样:

var imgSnapshot:ImageSnapshot = ImageSnapshot.captureImage(savableCanvas,72,new PNGEncoder(),false);
            var bArray:ByteArray = imgSnapshot.data;

            var fileRef:FileReference = new FileReference();
            fileRef.save(bArray,"mySavedImage.png");

此外,您的问题是否存在拼写错误,86,400 像素是要处理的大量数据,您可能应该使用一些服务器端代码和平铺技术(想想,谷歌地图)来处理这个问题。 . 这样,如果您说使用 php,您可以使用 imagick 并裁剪所需的动态创建部分。现在,如果它是 8,640 像素,那就另当别论了,请查看 Google Code 上的 BitmapDataUnlimited。不用担心,它是商业友好的。然而,它确实是有代价的,大的画布需要很好地管理,考虑到一个 12k x 12k 的 bitmapData 对象据说至少有 1GB 的内存,在使用后立即丢弃......

【讨论】:

    【解决方案2】:

    您可以为大型 Canvas 拍摄多张快照,按比例缩小,然后将它们重新拼接在一起。但是对于这么大的组件,任何类型的位图捕获都将非常密集。

    【讨论】:

      【解决方案3】:

      您也可以尝试在画布上设置 scaleX/scaleY 属性,使其适合您的 910x30 尺寸,然后进行快照。这样一来,Flash 就会为您扩展。

      【讨论】:

        猜你喜欢
        • 2020-12-16
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        相关资源
        最近更新 更多