2011-08-12 29 views
0

我正在嘗試創建一個類似於Android「圖庫」的圖像庫,它是一個水平滾動的圖像列表。我正在用包裝在UIComponent中的HBox和Bitmap對象執行此操作。問題是我正在嘗試爲手機做這些,並且在內存中打開許多全尺寸圖像會導致問題。我一直在試圖讓圖像正確加載,因爲它們滾動到視圖中並且在視圖不可見時卸載,但滾動時加載/卸載需要太多的cpu,並導致非常不穩定和不良的UI。(ActionScript 3)生成低分辨率縮略圖

我期望做的是能夠加載幾個低質量的圖像在內存中的版本,所以我不必做太多的加載/卸載。我曾嘗試降低高度/寬度,但它似乎對內存使用量有影響。有沒有人知道一個AS庫或類可以幫助我?

任何幫助將不勝感激。 謝謝

回答

1

我不知道格里芬說的是真的還是不是,但我會做的是採取bitmapdata並將其繪製到另一個具有最終高度和寬度的bitmapdata對象中,然後使用矩陣在原始圖像,而您繪製到新的位圖。
一旦你有了新的位圖,你就可以刪除並刪除所有對原始位圖的引用,它應該允許它被GCed。

如果你去here你可以閱讀如何縮放矩陣。

+0

謝謝,我現在就試試看 – jln646v

0

更改寬度和高度並不意味着更多的內存明智,因爲正在加載相同的圖像文件。

Actionscript無法主動調整圖像文件本身,只有Flash應用程序中的數據實例。 (即,您可以對所有喜歡的位圖數據對象進行重新採樣,但在內存中仍然保留原始文件)。

您需要一些服務器端語言來爲您調整圖像大小。就像使用GD庫的PHP一樣。

+0

你確定嗎?很確定你可以 –

+0

@The_asMan告訴我如何。 – Griffin

+0

smallerDisplayObject.draw(largerDisplayObject,matrix); –

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);創建一個縮小的副本。一旦你有了正確的縮放比例,你就可以將它複製到你的移動應用程序中。

+0

您如何從第一個位置數據文件中獲取圖像數據?此外,由於BitmapData對象是圖像的_raw_表示,因此內存飢餓。這不是這樣。 – Griffin

+0

+ 1擊敗我。 –

+0

@griffin - 獲取imageData。你從一個空白的位圖數據開始。那麼bitmapdata.draw()將用一個副本填充它。這部分很容易。 Bitmapdata對象內存飢餓:沒有其他方法可以在Flash中顯示圖像。所以你堅持bitmapdata。希望在屏幕上繪製小縮略圖比在屏幕上繪製大尺寸圖像要少。在閃光燈中,平局通常是最密集的部分,而不是數據。 此外 - 問題如何製作縮略圖。這是如何完成的。也許Flash Player 11將使用Stage3D提供更好的解決方案。 –

0

謝謝你所有的迴應。我一直在玩這個,而AIR使用的內存似乎沒有什麼區別。我正在尋找一種方法在內存中保留一個小的,低分辨率的圖像版本,因爲在移動設備的內存中有一些完整的res圖像會佔用所有資源。