【问题标题】:(ActionScript 3) Generate low res thumbnails(ActionScript 3) 生成低分辨率缩略图
【发布时间】:2011-10-26 04:31:56
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以创建所需大小的新位图数据,并使用 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);创建一个缩小的副本。一旦你确定了正确的缩放比例,你就可以将它复制到你的移动应用中。

    【讨论】:

    • 您首先如何从文件中获取 BitmapData 的图像数据?此外,BitmapData 对象需要大量内存,因为这是图像的 原始 表示。这不是办法。
    • @griffin - 获取 imageData。你从一个空白的位图数据开始。然后 bitmapdata.draw() 将使用副本填充它。所以这部分很容易。位图数据对象需要大量内存:没有其他方法可以在闪存中保存图像。所以你被位图数据困住了。希望在屏幕上绘制小缩略图会比在屏幕上绘制大尺寸图像更容易。在闪存中,绘图通常是最密集的部分,而不是数据。此外 - 问题询问如何制作缩略图。这就是它的完成方式。也许 Flash Player 11 会使用 Stage3D 提供更好的解决方案。
    • @Plastic Sturgeon 您可以通过LoaderURLLoader 类加载图像。 - 不需要 BitmapData。
    • 当你这样做时,加载器内容对象将是一个位图对象。该 BitmapObject 具有 BitmapData 属性。 QED。
    【解决方案2】:

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

    如果您访问 here,您可以阅读有关如何缩放矩阵的信息。

    【讨论】:

    • 谢谢,我现在就试试这个
    【解决方案3】:

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

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

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

    【讨论】:

    • 你确定吗?很确定你可以
    • smallerDisplayObject.draw(bigDisplayObject, matrix);
    • @The_asMan 是 biggerDisplayObject 那么还没有在内存中?
    • 原件已缓存,较小的无需缓存。是的,更大的内存在内存中,这就是为什么你将它清空并丢失对它的所有引用。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2017-11-25
      • 2017-02-27
      • 1970-01-01
      • 2015-06-11
      • 2015-07-02
      • 1970-01-01
      相关资源
      最近更新 更多