Bitmap尺寸与画质对比:哪类易引发OutOfMemoryException?
哪张Bitmap更易引发OutOfMemoryException?
答案很明确:那张2K尺寸的低画质Bitmap更容易引发OOM,核心原因在于Bitmap在内存中的占用逻辑和文件大小完全无关——真正决定内存消耗的是像素总数和像素编码格式,而非文件的压缩后大小。
关键原理拆解
Bitmap加载到内存后,是被解码为原始的像素数据存储的,计算公式是:内存占用 = 图像宽度 × 图像高度 × 单个像素字节数
我们看到的文件大小(比如4MB、2MB)是图像经过压缩(JPG/PNG等格式的压缩算法)后的结果,压缩率高低(画质好坏)只影响文件大小,和内存里的像素数据量没有直接关系。
对应你的例子计算
假设我们用最常见的ARGB_8888像素格式(每个像素占4字节):
- 480p Bitmap(按标准640×480计算):
内存占用 = 640 × 480 × 4 = 1,228,800字节 ≈ 1.17MB
它的4MB文件大小只是因为压缩率低(画质高),但像素总数少,内存占用很低。 - 2K Bitmap(2560×1440):
内存占用 = 2560 × 1440 × 4 = 14,745,600字节 ≈ 14MB
它的2MB文件大小是因为压缩率高(画质低),但像素总数是480p的12倍左右,内存占用远超前者。
哪怕换成更节省内存的RGB_565格式(每个像素2字节),2K Bitmap的内存占用也有≈7MB,依然远大于480p的≈0.58MB。
额外提醒
如果你的场景里需要加载大尺寸Bitmap,一定要记得做采样压缩(比如通过BitmapFactory.Options.inSampleSize参数),降低加载到内存的像素数量,避免OOM。
内容的提问来源于stack exchange,提问作者Rifat
相关产品推荐
相关产品推荐

