我在Eclipse Memory Analyzer(也称为MAT)的帮助下分析了我的Android应用的内存使用情况。有时我可以找到android.graphics.Bitmap
类的奇怪实例,利用大部分堆。问题是我找不到这个位图的来源,没有文件名,没有 resourceID ,什么都没有。我能找到的关于位图的所有信息如下:
我假设有一个带有图像像素数组的字段mBuffer
。但它采用的是一些内部Android格式,而不是PNG。
问题:如何从内存转储中查看此位图所代表的图像?
答案 0 :(得分:123)
我找到了查看这些位图的方法:
Bitmap
对象,右键单击mBuffer
字段,在弹出菜单中选择“复制” - > “将值保存到文件”菜单项并将此数组的值保存到某个文件.data
提供给该文件.data
文件,然后点击打开按钮此时您应该已经观察过原始图像的预览。如果没有,您可以尝试更改“从原始数据加载图像”对话框中的其他一些参数。
注意:要获得图片的宽度和高度,您可以查看属性部分MAT中的mWidth
和mHeight
字段,如相关图片所示。
答案 1 :(得分: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
例如
convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png
您可以通过eog检查生成的png文件,例如eog phone_decor.rgba
上Ubuntu
轻松检查。