如何保存一个大型Flex组件的图像(例如:25000px × 3000px @ 72dpi)



我的应用程序包括向用户显示一个大型自定义树状结构,该结构最终可以增长到像问题中列出的尺寸那样的巨大比例。我允许他们使用以下代码行来导出与按钮单击事件绑定的图像:

var image:ImageSnapshot = ImageSnapshot.captureImage(this, 72, new PNGEncoder(), false);

我已经成功地导出了接近所列尺寸的图像,但在那里,它开始得到下面列出的错误信息后旋转近15秒:

Error: Error #1000: The system is out of memory.
    at flash.utils::ByteArray/writeBytes()
    at mx.graphics::ImageSnapshot$/mergePixelRows()[E:dev4.xframeworksprojectsframeworksrcmxgraphicsImageSnapshot.as:511]
    at mx.graphics::ImageSnapshot$/captureAll()[E:dev4.xframeworksprojectsframeworksrcmxgraphicsImageSnapshot.as:482]
    at mx.graphics::ImageSnapshot$/captureImage()[E:dev4.xframeworksprojectsframeworksrcmxgraphicsImageSnapshot.as:318]
    at vertical/saveChart()[C:develworkspaceverticalsrcCustomObject.mxml:501]
    at vertical/__saveImageBtn_click()[C:develworkspaceverticalsrcCustomObject.mxml:574]

是flashplayer插件为我的浏览器运行内存不足?我注意到在我的任务管理器中,它的内存使用量高达1.2GB(我的系统上有4GB)。如果是这种情况,是否有可能限制给定函数的内存使用,如上面的ImageSnapshot.captureImage()调用?

是否有一种方法可以将组件生成2或4个ImageSnapshot对象,然后将它们拼凑在一起?

我相信最新的Flash Player 11有一个新功能可以解决这个问题:

"增强的高分辨率位图支持- BitmapData对象不再局限于最大分辨率为1600万像素(16,777,215像素),最大位图宽度/高度不再局限于8,191像素,从而能够开发利用非常大的位图的应用程序。"

如果你正在使用BitmapData,它使不同的FlashPlayer你的目标:

versions VS maximum bitmapsize

flashplayer -9: 2880x2880px
Flashplayer 10: 4096x4096px
Flashplayer 11: unlimited

我不知道你到底想用这个巨大的捕获做什么,但我建议使用tile。将其分解为相对较小的位图块。分别创建它们,这样你就不必在内存中打开/创建大量数据。

无论如何,这将是很高兴知道是否有可能编码大屁股大小的图像,没有Error #1000 out of memory错误。

相关内容

最新更新