MAT(Eclipse内存分析器) – 如何查看内存转储的位图
我正在分析Eclipse内存分析器 (也称为MAT)的帮助下我的Android应用程序的内存使用情况。 有时我可以findandroid.graphics.Bitmap
类的奇怪实例,利用大部分的堆。 问题是我无法find这个位图的来源,没有文件名 ,没有资源ID ,什么都没有。 所有信息我可以find的位图如下:
有一个与图像像素arrays的字段mBuffer
,我假设。 但它在一些内部的Android格式,而不是PNG。
问题 :如何从内存转储中查看由此位图表示的图像?
我find了一种方法来查看这样的位图:
- 首先,您需要下载并安装GIMP
- 接下来,在MAT中find你的
Bitmap
对象,右键单击mBuffer
字段,在popup的菜单中select“Copy” – > “Save Value To File”菜单项,并将该数组的值保存到某个文件 - 给扩展名
.data
文件 - 启动GIMP,select“文件” – > “打开” ,select你的
.data
文件并点击打开button - “从原始数据加载图像”对话框将出现。 在这里你需要为你的位图设置正确的参数
- 首先,select“图像types”为“RGB Alpha” (大多数Android资源都具有此图像types,但您可能需要尝试其他图像types)
- 第二,为您的位图设置正确的宽度和高度 (正确的尺寸可以在内存转储中find)
此时您应该已经观察原始图像的预览。 如果没有,您可以尝试更改“从原始数据加载图像”对话框中的其他参数。
注意:要获得图像的宽度和高度,可以查看MAT中属性部分中的mWidth
和mWidth
字段,如图所示。
您可以使用ImageMagick在命令行上将内存转储从MAT转换为PNG。
在MAT
的相关Bitmap
对象中,右键单击mBuffer
字段,select“Copy” – >“Save Value To File”,以.rgba
扩展名命名该文件。
您需要注意mWidth
和mWidth
字段的位图宽度和高度,您可以在Bitmap对象中看到这些字段。
安装ImageMagick
命令行工具(对于Ubuntu apt-get install imagemagick
),使用以下参数发出convert
命令。
convert -size 'width'x'height' -depth 8 filename.rgba filename.png
例如
convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png
你可以通过eog检查生成的png文件,比如Ubuntu
上的eog phone_decor.rgba
。