为什么在Android中,位图在内存中的大小比磁盘上的大?

18

我在SD卡上有一张2448x3264像素的图片,它占用了1,667,072字节的空间。但是当我将其加载为位图并使用getRowBytes()*getHeight()计算大小时,结果却是15,980,544字节。

为什么会这样,并且如何计算文件的实际大小?


这张图片是什么格式? - Adam Stelmaszczyk
我认为Devunwired已经回答了这个问题。 - Saqib
1个回答

42

这是因为在存储到磁盘上(以JPG、PNG或类似格式存储)时图像会被压缩。一旦将图像加载到内存中,它就不再被压缩,并且需要为所有像素占用尽可能多的内存空间(通常是RGBA_8888为宽度x高度x4,RGB_565为宽度x高度x2)。


好的,我现在明白了。只是想确认一下,如果我使用bitmap.compress(Bitmap.CompressFormat format, int quality)将位图压缩到FileOutputStream中,然后再读取位图,它仍然会给出大尺寸。对吗? - Saqib
1
正确的,压缩图像只是一种文件存储格式。为了实际处理数据,必须将其还原为完整的位图存储在内存中。 - devunwired
我有一个1024600的图像在Android上被读入内存。我的计算表明1024600*4 = ~3 MB,而DDMS告诉我它在内存中是4.2 MB,你知道是什么原因导致了额外的开销吗? - Dori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接