2012-08-29 37 views
1

我在使用bitmapfactory.decodestream從Internet加載圖像時遇到了問題。例如,這形象: https://portal.apprenticexm.nl/appportal/public/apps/1/media/807162_88149365.jpgBitMapFactory.decodeStream嘗試在小圖像上分配多於20 MB

這是剛剛超過100 KB的大小,而且取決於bitmapfactory.decodestream錯誤說我嘗試分配更多的則20 MB: 產生的原因:java.lang.OutOfMemoryError:位圖大小超過虛擬機預算(堆大小= 8007KB,分配= 3662KB,位圖大小= 23756KB)

我希望有人能夠解決這個問題。

最佳, 彼得

+0

lock at this answer:http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object/823966# 823966 – Pasha

+0

我已經看到了這些答案,但是您能否解釋一下100KB的圖像如何發生超過20 MB的情況? – user1632374

回答

0

在磁盤上的大小無關,與位圖的內存大小。在第一種情況下,圖像被壓縮,而位圖則只是一組原始像素。您還必須考慮諸如圖像配置之類的東西。如果我記得沒錯,JPG格式不支持alpha通道,因此更輕盈比ARGB_8888

的Android的默認配置

您可以控制如何加載與BitmapFactory.Options

+0

但是,如果我將圖像縮小到最大屏幕尺寸,我不應該遇到問題(除了使用的圖像總數)? – user1632374

4

亞歷克斯·奧爾洛夫說圖象:「磁盤上的大小與內存中的位圖大小無關,在第一種情況下,圖像是壓縮的,而位圖則只是一組原始像素。「然而,即使考慮到它是以原始圖像的形式存儲的,20MB仍然過多。如果我們考慮每像素4B,那將是5Mpix的圖像,但是你發佈的那個圖像確實更小。

我有類似的問題:我正在加載一個原始格式爲8MB的圖像,但是,分配了32MB的圖像。後來我發現這是由dpi縮放引起的。如果您的圖像位於「可繪製」文件夾中,則會根據當前的屏幕dpi自動縮放圖像。我有一個XHDPI屏幕,所以我的圖像水平縮放2倍,垂直縮放2倍,這就是爲什麼它需要4倍的內存。

你可以找到更多有關dpi的是如何在這裏工作:http://developer.android.com/guide/practices/screens_support.html

如果你不想使用這種自動機器人的功能和規模的圖像你自己,只需重命名你的「繪製」文件夾「可繪-nodpi」。標記爲「nodpi」的「drawable」文件夾中的所有圖像將按原樣加載。

相關問題