减小.png文件的大小会对内存中的Bitmap产生一些影响

时间:2010-04-08 17:57:10

标签: android png bitmap

我正在用大量的PNG图片编写游戏。一切正常。比我添加WebView的新活动并且内存不足。之后我做了一些实验 - 将游戏PNG图像替换为完全填充了一些颜色的游戏。结果,内存短缺已经消失。

但我认为Bitmap内部分别保持每个像素,因此这些更改应该没有效果。也许这是因为初始图像有alpha通道而我的测试图像没有呢?

但实际问题是:降低PNG图像文件大小是否会对减少VM应用程序堆的使用产生影响?

3 个答案:

答案 0 :(得分:4)

您应该查看将图像解码为的位图配置。我不知道具体配置文件是什么意思,但是例如,您可以解码为ARGB_8888或简单地解码为RGB_565。 RGB_565使用较少的内存,可能是因为它没有alpha(透明度)通道,并且每种颜色使用较少的位。在你的情况下,可能发生的事情是,简单的图像被解码为RGB_565,而更复杂的图像被解码为ARGB_8888。

更改正在使用的配置的方法是在解码图像文件期间,如下所示:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon, options);

试验一下,看看它是否有帮助。这样做确实帮助了我的游戏。

答案 1 :(得分:3)

Android与否,内存中的位图不会被压缩,因此它们将采用(每像素位数)*宽度*高度,根据像素格式会有一些变化。

我不知道如何绘制PNG的细节,但可能正在发生的事情是更简单的PNG需要更少的内存来解码。

答案 2 :(得分:1)

Android中Bitmap对象的内存使用与图像分辨率有关,而不是原始格式(jpg,png等)或文件大小。它需要大约3个字节的pr像素(1个字节的pr颜色通道)。

无论如何,如果您使用BitmapFactory来解码图像,则在解码输入流时,较小的源文件需要较少的内存。

您可以使用Dalvik调试器(ddms)自行测试。 从下拉列表中选择Sysinfo选项卡,选择内存使用情况。您将看到我的应用程序使用了多少内存。