(ActionScript 3)生成低分辨率缩略图

时间:2011-08-12 22:13:51

标签: flash flex actionscript-3 image flash-builder4.5

我正在尝试创建一个类似于Androids“Gallery”的图库,它是一个水平滚动的图像列表。我正在使用包装在UIComponent中的HBox和Bitmap对象执行此操作。问题是我正在尝试为移动设备做这个并且在内存中打开许多全尺寸图像会导致问题。我一直在尝试将图像加载到右侧,因为它们滚动到视图中并在它们不在视图时卸载,但滚动时加载/卸载需要太多的CPU并导致非常不连贯且不良的UI。

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

非常感谢任何帮助。 谢谢

4 个答案:

答案 0 :(得分:3)

您可以创建所需大小的新bitmapdatas,并使用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);创建缩小的副本。一旦你通过适当的扩展计算得出它,就可以将它复制到你的移动应用程序中。

答案 1 :(得分:1)

我不知道格里芬说的是不是真的,但我要做的是把bitmapdata绘制到另一个bitmapdata对象中,最终的高度和宽度达到你想要的,然后使用矩阵来缩放原始绘制到新位图时的图像 一旦你创建了新的位图,你就可以删除并删除对原始位图的所有引用,这些引用应该允许它进行GCed。

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

答案 2 :(得分:0)

由于正在加载相同的图像文件,因此更改宽度和高度并不意味着内存很多。

Actionscript无法自行维护图像文件本身,只能刷新Flash应用程序中的数据实例。 (即您可以重新采样位图数据对象,但仍然在内存中保留原始文件。)

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

答案 3 :(得分:0)

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