无法创建Canvas的快照

时间:2009-11-06 12:40:36

标签: flex components snapshot bitmapdata

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

现在,我希望获得整个画布和快照的快照。将其缩小到910x30的大小,以在另一个画布中绘制拍摄的快照。

有人能告诉我如何拍摄如此大的组件的快照吗?

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

是否有其他想法可能,如果是,请告诉我。

欢迎提出建议。

3 个答案:

答案 0 :(得分:2)

我还没有对此进行过测试,但如果您将BitmapData全部解除并直接从客户端计算机获取结果会怎么样?像这样:

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,640px,那么这是另一个故事,请查看Google Code上的BitmapDataUnlimited。不用担心,它是商业友好的。然而,它确实付出了代价,大量的画布需要很好地管理,并在使用后立即丢弃,考虑到12k x 12k bitmapData对象据说至少有1GB的内存...... / p>

答案 1 :(得分:0)

您可以拍摄大型画布的多个快照,缩小,然后将它们拼接在一起。但对于大型组件的任何类型的位图捕获都会非常密集。

答案 2 :(得分:0)

您也可以尝试在画布上设置scaleX / scaleY属性,使其适合您的910x30大小,然后执行快照。这样Flash就可以为你扩展。