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