【问题标题】:Android: Bitmap size in memoryAndroid:内存中的位图大小
【发布时间】:2016-09-26 01:41:26
【问题描述】:

我正在使用密度为 420 dpi 且屏幕尺寸为 1080x1920 像素的 Nexus 5X 模拟器。我将原始大小的位图加载到 ImageView 中。在磁盘上,位图的大小为 1.3 MB 和 1280x851 像素。 我的 ImageView 尺寸是宽度:全屏,高度:全屏。我的图像具有 32 位颜色深度 = 每像素 4 个字节。我计算出内存中的预期大小为 1080x1920x4=8.29 MB。

当我运行我的代码并加载我的图像时,它在内存中的大小约为 30MB。这是什么原因?如何调整我的计算以获得正确的估计?我当然知道将缩小图像加载到小容器中的方法,但我试图弄清楚如何计算完整图像的大小。

谢谢

【问题讨论】:

  • "在磁盘上" -- 你的项目中这个文件到底在哪里?或者您是否通过其他方式(例如,从文件、从 Web URL)加载图像?
  • 在可绘制文件夹内。我知道最好避免在可绘制文件夹内使用高分辨率图像,但我正在尝试找到正确的计算方法。我正在通过 setImageResource(resId) 加载图像

标签: android bitmap


【解决方案1】:

我计算出预期的内存大小为 1080x1920x4=8.29 MB。

屏幕大小在这里无关紧要。

res/drawable/res/drawable-mdpi/ 的旧同义词。您表示您的图像是为-mdpi 设备设计的(~160 dpi),并且应该为更高密度的设备上采样(并为-ldpi 设备下采样)。

Nexus 5X 被归类为-xxhdpi 设备(~480 dpi)。这意味着原始图像的每个像素都应映射到上采样图像中的 9 个像素(每个轴上 480 / 160 = 3)。 1280 x 851 = 1089280 像素 * 9 缩放因子 * 4 字节/像素 = 39214080 字节 = 37.4MB。

【讨论】:

  • 谢谢!!你帮了我很多
  • 我的 bitmaop 大小为 h:3024 和 w:4032,在银河边缘 7 中,这是否意味着它是 3024*4032*4 字节?
  • @AalapPatel:是的。
  • 如何在使用 Picasso 或 Glide 或任何其他图像加载库从 Url 加载图像时计算内存中的位图大小? @CommonsWare
  • @RohitSingh:我会在 API 级别 19+ 上使用 getAllocationByteCount()。但除此之外,是的,给定Bitmap,这就是您确定它消耗多少堆空间的方式。抱歉,我没有意识到您在之前的评论中指的是有一个实际的 Bitmap 对象。
猜你喜欢
  • 1970-01-01
  • 2013-11-19
  • 2012-07-12
  • 2016-04-11
  • 1970-01-01
  • 2013-08-17
  • 2015-09-03
  • 2014-05-29
  • 1970-01-01
相关资源
最近更新 更多