2013-01-25 50 views
5

我一直有這個意思,現在要問這很長一段時間了。我正在創造這個遊戲,我繪製了一個非常大的背景。但問題是(當然),當我將更多元素放到遊戲中時,我會遇到OutOfMemory異常。OutOfMemory異常:壓縮圖像會減小堆大小嗎?

我一直在問的是,會壓縮圖像減少堆大小分配?例如,我的PNG背景(3000×2000像素)約爲1.5MB。經過一系列PNG壓縮(通過諸如TinyPNG和PNGGauntlet等軟件)後,背景大小大幅降至712 KB。這裏的壓縮圖像仍然與原始尺寸相同(3000到2000年)。

原始背景大小(1.5 MB)的堆大小分配是否與壓縮(712 KB)相同?

+1

非常好的問題。答案可能是「是」,因爲圖形系統需要在屏幕上繪製未壓縮的圖像,但我不確定。我會試着將背景縮小到1500 x 1000,然後查看內存消耗是否下降了四倍。 – dasblinkenlight

+0

是的,我會盡快完成其他模塊。我不知道如何去做這件事,但是在完成圖像壓縮之後,遊戲的FPS已經大幅增加。但是,我不完全確定堆大小是否已經減小。 – dabaerju

回答

1

答案是肯定的,壓縮和未壓縮的圖像佔用相同數量的內存 - 它們最終只是最終成爲R,G,B(,A)值的網格。
只有當您使用GPU直接支持的壓縮形式(例如OpenTC紋理的S3TC壓縮)時,才能保存一些內存。

壓縮減少了兩件事:磁盤上的文件大小和加載文件所需的IO時間量(雖然這種節省可能會被解壓縮過程所抵消)。

然而,您可以將圖像加載到除ARGB_8888之外的位圖類型(例如RGB_565) - 這會減少存儲位圖所需的內存量(但圖像質量會降低)。

+0

我對於爲什麼即使在壓縮這些圖像後仍然不斷收到OutOfMemory異常感到非常疑惑。就目前而言,我現在知道壓縮只會提高屏幕的性能,並減少加載所需的時間。非常感謝你清理那個!我想除了允許大堆大小或減小文件大小之外別無他法。 – dabaerju

+1

您可以將圖像加載到除ARGB_8888之外的位圖類型(例如RGB_565 - 這將使用一半的內存)。 –