【发布时间】:2012-02-27 09:40:48
【问题描述】:
我有点迷茫:
案例 1:我尝试制作包含 26 张图片的动画(每张图片大小约为 200KB)。总计为 5,3 MB。动画效果很好。图像已加载到内存中,一切正常。
案例 2:现在,当我尝试制作包含 129 个图像(每个大约 30KB,总共 4.6 MB)的动画时,我遇到了内存不足异常。
我正在跟踪内存分配,在“案例 1”中,加载后每个位图的加载位图图像大小为 691200 字节。在“case 2”中,每个文件的位图大小约为 563520 字节。
使用getRowBytes() * getHeight() 进行计算
这很奇怪,“case 2”中的图像尺寸大约缩小了 6 倍,但加载后尺寸却完全一样。
这就是我将位图加载到内存的方式:
for (int i = 0; i <= 128; i++) {
imagesHolder[i] = BitmapFactory.decodeResource(
getApplicationContext().getResources(),
getApplicationContext().getResources().getIdentifier(
"image" + (i + 1) + "", "drawable",
getApplicationContext().getPackageName()));
System.out.println(imagesHolder[i].getRowBytes() * imagesHolder[i].getHeight());
totalSize+=imagesHolder[i].getRowBytes() * imagesHolder[i].getHeight();
System.out.println("TOTAL: "+totalSize);
}
那么,为什么我的小图像在加载到内存后会变得如此之大?所有提示表示赞赏。 :)
【问题讨论】:
-
case2的位图分辨率高于case1?
-
在 case2 中位图分辨率为“391*320”,在 case1 中为“320*480”。那么解决方案可以成为这里的关键吗?
-
分辨率是关键。图像像素数据将占用宽度 * 高度 * 深度 (4) 个字节。
标签: android bitmap out-of-memory