2012-07-12 42 views
13

我的SD卡上有一張2448x3264的圖像,消耗1,667,072字節,但是當我將它作爲位圖加載並使用getRowBytes()*getHeight()來計算其大小時,我最終得到了15,980,544字節。爲什麼Android中的磁盤上的位圖大小比內存大?

爲什麼會發生這種情況,我該如何計算文件的實際大小?

+0

這張圖片的格式是什麼? – 2012-07-12 21:40:22

+0

格式是jpeg。我認爲Devunwired回答了它 – Saqib 2012-07-12 21:47:36

回答

37

這是因爲圖像在磁盤上時被壓縮(以JPG,PNG或類似格式存儲)。一旦將圖像加載到內存中,它不再被壓縮,並佔用所有像素所需的儘可能多的內存(對於RGBA_8888,通常寬度*高度* 4,對於RGB_565通常寬度*高度* 2)。

+0

好吧,我現在明白了。只是爲了確認我是否使用bitmap.compress(Bitmap.CompressFormat格式,int質量)將位圖壓縮到FileOutputStream,並再次讀取位圖,即使這樣也會給出較大的尺寸。對? – Saqib 2012-07-12 22:11:40

+1

正確,壓縮的圖像只是一種文件存儲格式。爲了實際處理數據,必須將其填充到內存中的完整位圖中。 – Devunwired 2012-07-12 22:14:31

+0

我有一個1024 * 600 img被讀入Android的mem。我的計算表明1024 * 600 * 4 =〜3 MB,而DDMS告訴我它在內存中的4.2 MB,任何想法是什麼導致額外的開銷? – Dori 2012-09-27 14:08:40

相關問題