在我的应用程序中,画布对象的高度 = 90 像素和宽度 = 86400 像素(表示一天中的秒数 [60 * 60 * 24] )。画布是可滚动的,用户可以在其中添加或删除组件。
现在,我想对整个画布进行快照并将其缩小到 910x30 的大小,以便在另一个画布中绘制拍摄的快照。
谁能告诉我如何拍摄如此大的组件的快照?
我曾尝试在 BitmapData 对象中拍摄快照,但由于它的最大宽度为 2880,因此无法提供整个画布快照。
有没有其他可能的想法,如果是,请告诉我。
欢迎提出建议。
在我的应用程序中,画布对象的高度 = 90 像素和宽度 = 86400 像素(表示一天中的秒数 [60 * 60 * 24] )。画布是可滚动的,用户可以在其中添加或删除组件。
现在,我想对整个画布进行快照并将其缩小到 910x30 的大小,以便在另一个画布中绘制拍摄的快照。
谁能告诉我如何拍摄如此大的组件的快照?
我曾尝试在 BitmapData 对象中拍摄快照,但由于它的最大宽度为 2880,因此无法提供整个画布快照。
有没有其他可能的想法,如果是,请告诉我。
欢迎提出建议。
我还没有对此进行测试,但是如果您将 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,640 像素,那就另当别论了,请查看 Google Code 上的 BitmapDataUnlimited。不用担心,它是商业友好的。然而,它确实是有代价的,大的画布需要很好地管理,并且考虑到一个 12k x 12k 的 bitmapData 对象据说至少有 1GB 的内存,因此在使用后立即丢弃......
您也可以尝试在画布上设置 scaleX/scaleY 属性,使其适合您的 910x30 大小,然后进行快照。这样一来,Flash 就会为您扩展。
您可以拍摄大型 Canvas 的多个快照,按比例缩小,然后将它们重新拼接在一起。但是对于这么大的组件,任何类型的位图捕获都将非常密集。