MAT(Eclipse内存分析器) – 如何查看内存转储的位图

我正在分析Eclipse内存分析器 (也称为MAT)的帮助下我的Android应用程序的内存使用情况。 有时我可以findandroid.graphics.Bitmap类的奇怪实例,利用大部分的堆。 问题是我无法find这个位图的来源,没有文件名 ,没有资源ID ,什么都没有。 所有信息我可以find的位图如下: bitmap_info

有一个与图像像素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中属性部分中的mWidthmWidth字段,如图所示。

您可以使用ImageMagick在命令行上将内存转储从MAT转换为PNG。

MAT的相关Bitmap对象中,右键单击mBuffer字段,select“Copy” – >“Save Value To File”,以.rgba扩展名命名该文件。

您需要注意mWidthmWidth字段的位图宽度和高度,您可以在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