2012-02-02 58 views
1

我有一個應用程序可以處理高分辨率圖像(大約100多萬像素),而且我有一些內存問題。當BitmapData對象被創建時,它會分配內存來存儲這個圖像。問題在於,我已經有了這個圖像像素的ByteArray(它有大約400+ MB),所以當BitmapData被創建時,它會分配內存來存儲我在ByteArray上的數據。BitmapData創建時分配大量內存

創建後,我可以將ByteArray中的像素設置爲BitmapData並釋放ByteArray。但是,這種內存峯值有時會導致運行時引發異常,並告知系統內存不足。

有什麼辦法告訴BitmapData使用我自己的ByteArray?或者我不需要使用其他解決方案的兩倍,我需要的內存?

+0

@AstheWormTurns這是一個相當不錯的資源,深入研究了BitmapData的內存消耗情況,我可能需要重新閱讀一次,以確保我記得實際上它的工作原理。 – shaunhusain 2012-02-03 03:41:13

+1

@Tiago我假設你使用BitmapData上的setPixels將字節數組中的信息加載到bitmapData中?如果你沒有找到任何其他的解決方案,也許你可以分片加載圖像,這意味着將第一個1/4的圖像拉入內存(或整個東西然後大塊),然後調用setPixels 4次,並在每次釋放內存在原始字節數組中,只要它已經在bitmapData上設置了...(宿舍僅僅是一個例子,可能會有更多或更少的分區工作,我不確定)。 – shaunhusain 2012-02-03 03:46:58

+0

@shaunhusain謝謝,這聽起來不錯。我會嘗試的。 – 2012-02-04 12:48:38

回答

1

如果有人需要這個,這是我做的:

我得到的ByteArray,其中包含了圖像的像素,從一個插座。我從小插件中讀取這些像素,所以我沒有等待從插槽中加載整個圖像,而是將這些小部分直接放到BitmapData中。這可以防止應用程序分配我實際需要的內存的兩倍。