0

我正在尝试创建一个类似于 Android 的“画廊”的图片库,它是一个水平滚动的图像列表。我正在使用包装在 UIComponent 中的 HBox 和 Bitmap 对象来执行此操作。问题是我正在尝试为移动设备执行此操作,并且在内存中打开许多全尺寸图像会导致问题。我一直试图让图像在滚动到视图时正确加载,一旦它们不在视图中就卸载,但是滚动时的加载/卸载需要太多的 CPU 并导致非常不稳定和糟糕的 UI。

我想要做的是能够在内存中加载几个低质量版本的图像,所以我不必做太多的加载/卸载。我试过降低高度/宽度,但它似乎对内存使用有影响。有谁知道可以帮助我的 AS 库或课程?

任何帮助将不胜感激。谢谢

4

4 回答 4

3

您可以创建所需大小的新位图数据,并使用 bitmapdata.draw() 函数制作更小的缩略图。诀窍是在调用 draw 时使用变换矩阵来缩小图像大小。

这是 Matrix 类的链接:http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html

这里是 bitmapData.draw() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#draw ()的链接

如果这对您来说不是 100% 直观,我建议制作一个简单的 swf,它只需要一张图像,然后使用 BitmapData.draw(myImage, myMatrix); 创建一个缩小的副本。一旦你用适当的缩放比例解决了它,你就可以将它复制到你的移动应用程序中。

于 2011-08-13T00:11:24.933 回答
1

我不知道格里芬说的是真的还是假的,但我要做的是获取位图数据并将其绘制到另一个位图数据对象中,最终高度和宽度为您想要的,然后在您使用矩阵缩放原始图像时绘制到新的位图。
一旦你制作了新的位图,你就可以删除并删除对原始位图的所有引用,这应该允许它被 GCed。

如果你去这里,你可以阅读如何缩放矩阵。

于 2011-08-13T00:21:08.917 回答
0

更改宽度和高度在内存方面并不意味着太多,因为正在加载相同的图像文件。

Actionscript 不能自己处理图像文件,只能处理 Flash 应用程序中的数据实例。(即,您可以随心所欲地重新采样位图数据对象,但您仍然在内存中有原始文件)。

您需要一些服务器端语言来为您调整图像大小。就像带有 GD 库的 PHP。

于 2011-08-12T22:17:20.957 回答
0

谢谢大家的回复。我一直在玩这个,似乎没有什么区别是 AIR 使用的内存。我正在寻找一种将图像的小、低分辨率版本保存在内存中的方法,因为在移动设备的内存中保存一些完整的分辨率图像会占用所有资源。

于 2011-09-23T05:33:46.000 回答