MAT (Eclipse Memory Analyzer): cómo ver mapas de bits desde el volcado de memoria

Estoy analizando el uso de la memoria de mi aplicación de Android con la ayuda de Eclipse Memory Analyzer (también conocido como MAT). A veces puedo encontrar instancias extrañas de la clase android.graphics.Bitmap , que utilizan gran parte del montón. El problema es lo que no puedo encontrar fuente de estos mapas de bits, ningún nombre de archivo , ningún ID de recurso , nada. Toda la información que puedo encontrar para el bitmap es la siguiente: bitmap_info

Hay un campo mBuffer con un conjunto de píxeles de imagen, supongo. Pero está en algún formato interno de Android, no en PNG.

Pregunta : ¿cómo puedo ver la imagen representada por este bitmap desde el volcado de memoria?

He encontrado una manera de ver tales mapas de bits:

  • Primero, necesitas descargar e instalar GIMP
  • A continuación, encuentre su objeto Bitmap en MAT, haga clic derecho en el campo mBuffer , en el menú emergente seleccione la opción de menú “Copiar” -> “Guardar valor en archivo” y guarde el valor de esta matriz en algún archivo
  • dar extensión .data a ese archivo
  • inicie GIMP, elija “Archivo” -> “Abrir” , seleccione su archivo .data y haga clic en el botón Abrir
  • Aparecerá el cuadro de diálogo “Cargar imagen de datos brutos” . Aquí debe establecer los parámetros correctos para su bitmap
  • primero, elija “Tipo de imagen” como “Alfa RGB” (la mayoría de los recursos de Android tienen este tipo de imagen, pero es posible que necesite experimentar con otros tipos de imágenes)
  • segundo, configure el ancho y la altura correctos para su bitmap (las dimensiones correctas se pueden encontrar en el volcado de memoria)

En ese punto, ya debería observar la vista previa de la imagen original. Si no lo hizo, puede intentar cambiar algunos otros parámetros en el cuadro de diálogo “Cargar imagen desde datos sin formato” .

NOTA: para obtener un ancho y alto de la imagen puede mirar los campos mHeight y mHeight en MAT en la sección de atributos como se muestra en la imagen en cuestión.

Puede convertir los volcados de memoria de MAT a png usando con ImageMagick en la línea de comandos.

En MAT para objeto Bitmap relacionado, haga clic derecho en el campo mBuffer y seleccione “Copiar” -> “Guardar valor en archivo”, .rgba un .rgba extensión .rgba .

Debe tener en cuenta el ancho y el alto del bitmap desde los campos mHeight y mHeight , que puede ver en el objeto Bitmap.

Teniendo instaladas las herramientas de línea de comandos de ImageMagick (para Ubuntu apt-get install imagemgick ), emite un comando de convert con los siguientes parámetros.

 convert -size 'width'x'height' -depth 8 filename.rgba filename.png 

Por ejemplo

  convert -size 680x1209 -depth 8 phone_decor.rgba phone_decor.png 

Puede verificar el archivo generado png a través de eog , como eog phone_decor.rgba en Ubuntu fácilmente.