缩放图像会导致AS3 Flex AIR Mobile App崩溃

时间:2016-05-26 16:35:25

标签: ios image flex air zoom

问题:

通过缩放和使用矩阵移动来放大图像会导致应用程序耗尽内存并崩溃。

使用的其他库:

Gestouch - https://github.com/fljot/Gestouch

说明

在我的Flex Mobile应用程序中,我在一个组内部使用Gestouch库启用了平移/缩放。缩放在一定程度上起作用,但导致应用程序死亡(不冻结,只退出),在某个缩放级别后没有错误消息。

这是可以管理的,除了我无法弄清楚如何实现一个阈值来停止缩放,因为它几乎每次都在不同的缩放级别崩溃。我也使用动态图像,因此图像的来源可以是任何大小或分辨率。

它们通常是JPEGS,大约800x600 - 9000x6000,从服务器下载,因此无法与应用程序一起打包。

从AS3文档开始,不再限制BitmapData对象的大小,因此不应该成为问题。

“从AIR 3和Flash播放器11开始,已删除BitmapData对象的大小限制。现在,位图的最大大小取决于操作系统。“

该组用作标记层,用于覆盖引脚。

崩溃主要发生在iPad Mini和较旧的Android设备上。

我尝试过的事情已尝试过:

1.使用Adobe Scout在发生内存泄漏时确定点。

2.调试以找到碰撞时标记图层和图像的确切高度和宽度。

3.根据图像大小设置最大缩放变量。

4.在缩放时拍摄图像仅显示可见区域。 (在copyPixels函数和BitmapData.draw()函数崩溃时)

5.使用imagemagick制作质量较低的图像(小图像仍会崩溃)

6.使用imagemagick制作非常低分辨率的图像并制作较小图像的网格。使用列表和平铺布局在移动应用程序中显示。

7.添加事件侦听器时使用弱引用。

任何建议都将不胜感激。

由于

maxmemory-policy=none

1 个答案:

答案 0 :(得分:0)

我想说在移动设备上使用像(9000x6000)这样的大图像并不是一个好主意。 我想你正在尝试实现某种地图导航,所以你需要大幅缩放某些区域。

  • 我的解决方案是将9000x6000拆分为2048x2048件,然后使用启用了mipmaps的png2atf实用程序对其进行压缩。
  • 然后您可以使用Starling轻松加载这些atf图像并将其添加到stage3d并轻松管理它。 如果您正在处理9000x6000图像 - 您将获得大约15个2048x2048件,将它们全部添加到舞台上,您可能认为它会很重,但是mipmap会使它只有很小的图像缩略图存在于内存中,直到它们不被缩放 - 因此,如果您在放大时不时从舞台上移除不可见的碎片,并在缩小时将其返回,则永远不会耗尽内存