1

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

背景

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

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

问题

我面临的问题是这个 3.20MB 的图像在设置为s:Skin应用到SkinnableContainer. 如果我使用较小版本的图像,尺寸为 3000 x 4500 像素,大小为 1.73MB,则会在应用程序中呈现。我在调试模式下运行应用程序,当大图像失败时我没有得到任何异常。在这两种情况下,子图形元素都SkinnableContainer可以很好地呈现。

更多实施说明:

  • 皮肤的来源是图像的 URL,目前,http://localhost/foo/bar.png. 我可以通过从 Firefox 中点击它来访问图像。
  • 我将来源设置如下BitmapImage([get the skin].backgroundImage).source = "http://localhost/foo/bar.png"

是否有我应该知道的由 Air 强制执行的内存限制?这是火花组件之一中的错误吗?为什么我没有任何异常?最重要的是,我该如何解决这个问题?

4

1 回答 1

1

BitmapData 对象的大小有一个内部限制,大概是由于它为它们分配内存的方式,所以我猜加载的图像也会遇到这种情况。有关限制的详细信息,请参见此处

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

于 2010-01-13T13:47:59.043 回答