MAT (Eclipse Memory Analyzer) - как просматривать растровые изображения из дампа памяти
Я анализирую использование памяти своего Android-приложения с помощью Eclipse Memory Analyzer (также известного как MAT). Иногда я могу найти странные экземпляры класса android.graphics.Bitmap
, используя большую часть кучи. Проблема в том, что я не могу найти источник этих растровых изображений, нет имени файла, никакого идентификатора resourceID, ничего. Вся информация, которую я могу найти для растрового изображения, следующая:
![bitmap_info]()
Полагаю, есть поле mBuffer
с массивом пикселей изображения. Но это в каком-то внутреннем формате Android, а не в PNG.
Вопрос: как я могу просмотреть изображение, представленное этим растровым изображением из дампа памяти?
Ответы
Ответ 1
Я нашел способ просмотра таких растровых изображений:
- Сначала вам нужно скачать и установить GIMP
- Затем найдите свой объект
Bitmap
в MAT, щелкните правой кнопкой мыши на поле mBuffer
, в контекстном меню выберите пункт "Копировать" → "Сохранить значение в файл" и сохраните значение этого массива в каком-либо файле
- предоставить расширение
.data
в этот файл
- запустите GIMP, выберите "Файл" → "Открыть", выберите файл
.data
и нажмите кнопку "Открыть"
- Появится диалоговое окно "Загрузить изображение из исходных данных". Здесь вам нужно установить правильные параметры для вашего растрового изображения.
- сначала выберите "Тип изображения" как "RGB Alpha" (большинство ресурсов для Android имеют этот тип изображения, но вам может потребоваться поэкспериментировать с другими типами изображений).
- второй, установите правильную ширину и высоту для вашего растрового изображения (правильные размеры можно найти в дампе памяти)
В этот момент вы должны уже наблюдать предварительный просмотр исходного изображения. Если вы этого не сделали, вы можете попробовать изменить некоторые другие параметры в диалоговом окне "Загрузить изображение из исходных данных".
ПРИМЕЧАНИЕ. Чтобы получить ширину и высоту изображения, вы можете посмотреть поля mWidth
и mHeight
в MAT в разделе атрибутов, как показано на изображении.
Ответ 2
Вы можете конвертировать дампы памяти из MAT в png, используя ImageMagick в командной строке.
В 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
Вы можете проверить сгенерированный файл png с помощью eog, например eog phone_decor.rgba
on Ubuntu
.