MAT (Eclipse Memory Analyzer) - как просматривать растровые изображения из дампа памяти

Я анализирую использование памяти моим Android-приложением с помощью Eclipse Memory Analyzer (также известного как MAT). Иногда я могу найти странные случаи android.graphics.Bitmap класс, использующий большую часть кучи. Проблема в том, что я не могу найти источник этих растровых изображений, ни имя файла, ни идентификатор ресурса, ничего. Вся информация, которую я могу найти для растрового изображения, следующая:bitmap_info

Есть поле mBuffer с массивом пикселей изображения, я полагаю. Но это в каком-то внутреннем формате Android, а не PNG.

Вопрос: как я могу просмотреть изображение, представленное этим растровым изображением, из дампа памяти?

2 ответа

Решение

Я нашел способ просмотра таких растровых изображений:

  • Во-первых, вам нужно скачать и установить GIMP
  • Далее найдите свой Bitmap объект в MAT, щелкните правой кнопкой мыши на mBuffer Во всплывающем меню выберите пункт "Копировать" -> "Сохранить значение в файл" и сохраните значение этого массива в некоторый файл.
  • дать продление .data в этот файл
  • запустите GIMP, выберите "Файл" -> "Открыть", выберите ваш .data файл и нажмите кнопку Открыть
  • Откроется диалоговое окно "Загрузка изображения из необработанных данных". Здесь вам нужно установить правильные параметры для вашего растрового изображения
  • во-первых, выберите "Тип изображения" в качестве "Альфа RGB" (большинство ресурсов Android имеют этот тип изображения, но вам может потребоваться поэкспериментировать с другими типами изображений)
  • во-вторых, установите правильные ширину и высоту для вашего растрового изображения (правильные размеры можно найти в дампе памяти)

На этом этапе вы уже должны наблюдать предварительный просмотр исходного изображения. Если вы этого не сделали, вы можете попробовать изменить некоторые другие параметры в диалоговом окне "Загрузка изображения из необработанных данных".

ПРИМЕЧАНИЕ: чтобы получить ширину и высоту изображения, вы можете посмотреть на mWidth а также mHeight поля в MAT в разделе атрибутов, как показано на изображении, о котором идет речь.

Вы можете конвертировать дампы памяти из MAT в png, используя ImageMagick в командной строке.

В MAT для связанных Bitmap щелкните правой кнопкой мыши объект mBuffer и выберите "Копировать" -> "Сохранить значение в файл", назовите файл с .rgba расширение.

Вам нужно отметить ширину и высоту растрового изображения из mWidth а также mHeight поля, которые вы можете увидеть в растровом объекте.

имеющий 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

Вы можете проверить сгенерированный файл png через eog, например eog phone_decor.rgba на Ubuntu без труда.

Другие вопросы по тегам