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

Hit*_*sit 48 android memory-dump bitmap hprof eclipse-memory-analyzer

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

mBuffer我假设有一个带有图像像素阵列的场.但它采用的是一些内部Android格式,而不是PNG.

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

Hit*_*sit 123

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

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

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

注:获得的宽度和图像的高度,你可以看看mWidthmHeight领域在MAT中的属性部分中的问题显示在图像.

  • 这应该更多.这是Android开发人员想要的最有用的东西.辉煌! (4认同)
  • 对于那些找不到显示`mWidth` -`mHeight`的窗口的人,请转到`Window-> Show View-> MAT-> Inspector`.在"dominator tree"中选择一个对象,在检查器窗口中可以看到高度 - 宽度. (2认同)

aus*_*len 6

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

MAT相关Bitmap对象右键单击mBuffer字段并选择"复制" - >"将值保存到文件",将文件命名为.rgba扩展名.

您需要注意位图宽度和高度mWidth以及mHeight字段,您可以在Bitmap对象中看到它们.

ImageMagick安装(Ubuntu的命令行工具apt-get install imagemagick),您发出convert以下参数的命令.

convert -size 'width'x'height' -depth 8 filename.rgba filename.png
Run Code Online (Sandbox Code Playgroud)

例如

 convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png
Run Code Online (Sandbox Code Playgroud)

您可以通过查看生成的PNG文件EOG,像eog phone_decor.rgbaUbuntu容易.