Android:内存中的位图大小

标签 android bitmap

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

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

谢谢

最佳答案

I calculated the expected size in memory as 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。

关于Android:内存中的位图大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689798/

相关文章:

java - 调用 unBindService() 时服务不会断开连接

android - 如何防止Android的drawBitmap只绘制黑色图像?

java - 编译 SDK 版本中的 Android Studio "Invalid hash string"警告

android - 如何找出有多少空闲堆大小可用于 Android 2.* 的位图?

java - 如何在ImageView java android上设置位图

c# - 当我不将 .Save() 的位图 .Dispose() 到 MemoryStream 时,为什么会发生内存泄漏?

java - 单击第二个按钮时的操作

javascript - 更新 iOS 和 Android 设备中的 PDF 条形码字段

c - 用黑色填充所有位图 1bpp

java - 使用Paint Android在onDraw中绘制透明颜色