MAT(Eclipse Memory Analyzer) - 如何从内存转储中查看位图

时间:2012-10-03 13:32:09

标签: android bitmap memory-dump hprof eclipse-memory-analyzer

我在Eclipse Memory Analyzer(也称为MAT)的帮助下分析了我的Android应用的内存使用情况。有时我可以找到android.graphics.Bitmap类的奇怪实例,利用大部分堆。问题是我找不到这个位图的来源,没有文件名,没有 resourceID ,什么都没有。我能找到的关于位图的所有信息如下: bitmap_info

我假设有一个带有图像像素数组的字段mBuffer。但它采用的是一些内部Android格式,而不是PNG。

问题:如何从内存转储中查看此位图所代表的图像?

2 个答案:

答案 0 :(得分:123)

我找到了查看这些位图的方法:

  • 首先,您需要下载并安装GIMP
  • 接下来,在MAT中找到您的Bitmap对象,右键单击mBuffer字段,在弹出菜单中选择“复制” - > “将值保存到文件”菜单项并将此数组的值保存到某个文件
  • 将扩展名.data提供给该文件
  • 启动GIMP,选择“文件” - > “打开”,选择您的.data文件,然后点击打开按钮
  • 将显示“从原始数据加载图像”对话框。在这里,您需要为位图设置正确的参数
  • 首先,选择“图像类型”作为“RGB Alpha”(大多数Android资源都有此图像类型,但您可能需要尝试其他图像类型)< / LI>
  • 第二步,为您的位图设置正确的宽度高度(可在内存转储中找到正确的尺寸)

此时您应该已经观察过原始图像的预览。如果没有,您可以尝试更改“从原始数据加载图像”对话框中的其他一些参数。

注意:要获得图片的宽度和高度,您可以查看属性部分MAT中的mWidthmHeight字段,如相关图片所示。

答案 1 :(得分:6)

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

MAT相关的Bitmap对象右键点击mBuffer字段,然后选择“复制” - &gt; “将值保存到文件”,将文件命名为.rgba扩展名。

您需要注意mWidthmHeight字段中的位图宽度和高度,您可以在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文件,例如eog phone_decor.rgbaUbuntu轻松检查。