Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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.