Image 在AdobeAIR应用程序中显示大型PNG图像

Image 在AdobeAIR应用程序中显示大型PNG图像,image,memory,air,memory-management,flex4,Image,Memory,Air,Memory Management,Flex4,我有一个最小的AdobeAIR应用程序;它基本上是mx:WindowedApplication中的s:skinnablecainer。我有一个6000 x 9000像素的PNG图像(~3.20MB),我想在SkinnableContainer中显示。请注意,s:SkinnableContainer是Flex 4 Beta3(spark components)中的一个标记 背景 在我解释这个问题之前,先了解一下这个应用程序的背景知识。此Air应用程序应该在服务器端运行,定期检查数据库并读取描述Sk

我有一个最小的AdobeAIR应用程序;它基本上是
mx:WindowedApplication
中的
s:skinnablecainer
。我有一个6000 x 9000像素的PNG图像(~3.20MB),我想在
SkinnableContainer
中显示。请注意,
s:SkinnableContainer
是Flex 4 Beta3(spark components)中的一个标记

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

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

问题 我面临的问题是,当将此3.20MB图像设置为应用于
SkinnableContainer
s:Skin
的源时,它不会出现。如果我使用尺寸为3000 x 4500像素、大小为1.73MB的较小版本的图像,它将在应用程序中渲染。我正在调试模式下运行应用程序,当大映像失败时,我不会得到任何异常。
SkinnableContainer
的子图形元素在这两种情况下都会得到良好渲染

更多实施说明:

  • 皮肤的来源是图像的URL,当前为
    http://localhost/foo/bar.png
    。我可以通过Firefox点击来访问图像
  • 我将源代码设置如下:
    BitmapImage([get the skin].backgroundImage)。源代码=”http://localhost/foo/bar.png“

是否有一个记忆的限制,我应该知道,这是强制执行的航空?这是spark组件中的错误吗?为什么我没有任何例外?最重要的是,我该如何解决这个问题?

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


至于修复它,我认为最简单的方法是将beast作为多个子图像进行读写-分为三分之一或四分之一,因为一半仍然超出限制。

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


至于修复它,我认为最简单的方法是将野兽作为若干子图像进行读写——分为三分之一或四分之一,因为一半仍然超出限制。

是的,这正是我所做的。我将图像分割成块并输出。谢谢你的链接,我自己也看到了相同的页面:)是的,我就是这么做的。我将图像分割成块并输出。谢谢你的链接,我自己也看到了相同的页面:)