在Adobe Air应用程序中显示大型PNG图像

时间:2009-12-23 22:15:39

标签: image memory air memory-management flex4

我有一个最低限度的Adobe Air应用程序;它基本上是s:SkinnableContainer内的mx:WindowedApplication。我有一个6000 x 9000像素的PNG图像(~3.20MB),我想在SkinnableContainer中显示。请注意,s:SkinnableContainer是Flex 4 Beta3(火花组件)的标签。

背景

在我解释这个问题之前,请先介绍一下这款应用的背景知识。此Air应用程序应在服务器端运行,并定期检查数据库并读取描述SkinnableContainer的图形内容(背景,子图像,子文本节点等)的XML标记。此标记实际上来自最终用户用于创建此图形内容的Flex Web应用程序。 Air应用程序应该做的是使用Flex Web应用程序中使用的图像的高分辨率版本,并重新创建最终用户在浏览器中创建的高分辨率版本的图形内容。 Air应用程序最终会将SkinnableContainer的内容写为要存档的位图。

我们使用Air应用程序的原因是为了确保在浏览器上呈现的较小版本的图形内容与Air应用程序将生成的高分辨率版本之间的呈现100%一致。 / p>

问题

我遇到的问题是,当设置为应用于s:Skin的{​​{1}}的来源时,此3.20MB图片不会显示。如果我使用较小版本的图像,其尺寸为3000 x 4500像素且为1.73MB,则会在应用程序中呈现。我正在调试模式下运行应用程序,当大图像失败时我没有任何异常。在这两种情况下,SkinnableContainer的子图形元素都可以正常显示。

更多实施说明:

  • 皮肤来源是图片的网址,目前为SkinnableContainer。我可以通过从Firefox点击它来访问图像。
  • 我按如下方式设置了来源:http://localhost/foo/bar.png;

是否存在我应该注意的由Air强制执行的内存限制?这是一个火花组件中的错误吗?为什么我没有得到任何例外?最重要的是,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

对BitmapData对象的大小有一个内部限制,可能是因为它为它们分配了内存,所以我猜测加载的图像也会碰到它。有关限制的详细信息,请参阅here

至于修复它,我认为最直接的做法是将野兽作为一些子图像读写 - 分成三分之二或四分之一,因为一半仍然超过极限。