Как на самом деле увидеть растровое изображение, взятое из дампа кучи Android - PullRequest
6 голосов
/ 08 марта 2012

В процессе отслеживания серьезных проблем с памятью в моем приложении я просматривал несколько дампов кучи из своего приложения, и большую часть времени у меня ОГРОМНОЕ растровое изображение, о котором я не знаю.

Этозанимает 9,4 МБ, или 9 830 400 байт, или фактически изображение 1280x1920 при 4 байтах на пиксель.

Я проверил в Eclipse MAT, это действительно байт [9830400], который имеет одну входящую ссылку, которая является android.graphics.Bitmap.

Я бы хотел сбросить это в файл и попытаться увидеть его.Я не могу понять, откуда это.Мое самое большое изображение во всех моих рисунках - это 640x960 png, что занимает менее 3 МБ.

Я пытался использовать Eclipse для «копирования значения в файл», но я думаю, что он просто печатает буфер в файл, иЯ не знаю ни одной программы для работы с изображениями, которая могла бы считывать поток байтов и отображать его как изображение размером 4 байта на пиксель.

Любая идея?

Вот что я пробовал: вывести массив байтовв файл, поместите его в / sdcard / img и загрузите действие, подобное этому:

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        final File inputFile = new File("/sdcard/img");
        final FileInputStream isr = new FileInputStream(inputFile);
        final Bitmap bmp = BitmapFactory.decodeStream(isr);
        ImageView iv = new ImageView(this);
        iv.setImageBitmap(bmp);
        setContentView(iv);
        Log.d("ImageTest", "Image was inflated");
    } catch (final FileNotFoundException e) {
        Log.d("ImageTest", "Image was not inflated");
    }
}

Я ничего не видел.

Вы знаете, как закодировано изображение?Скажите, что оно хранится в byte[] buffer.buffer[0] красный, buffer[1] зеленый и т. Д.

Ответы [ 5 ]

4 голосов
/ 31 января 2013

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

TL; DR - Установите GIMP и загрузите изображение в виде необработанной RGB Alpha

2 голосов
/ 08 марта 2012

ОК. После нескольких неудачных попыток я наконец-то получил что-то из этого байтового массива.Я написал эту простую C-программу для преобразования массива байтов в файл растрового изображения Windows.Я отбрасываю код на случай, если кто-то заинтересован.
Я скомпилировал это для VisualC 6.0 и gcc 3.4.4, он должен работать на любой ОС (протестировано на Windows, Linux и MacOS X).

Таким образом, с помощью этого инструмента я смог распознать изображение, использованное для создания этого растрового изображения 1280x1920.

1 голос
/ 03 декабря 2016

Я обнаружил, что, начиная с последней версии Android Studio (2.2.2 на момент написания), вы можете просматривать растровый файл напрямую:

  1. Откройте вкладку «Android Monitor» (внизу слева), а затем вкладку «Память».
  2. Нажмите кнопку «Dump Java Heap»

  3. Выберите имя класса «Растровое изображение» для текущего снимка, выберите каждый экземпляр растрового изображения и просмотрите, какое изображение в точности потребляет больше памяти, чем ожидалось. (экраны 4 и 5)

  4. Выберите Bitmap имя класса…

enter image description here

  1. Выберите каждый экземпляр растрового изображения

enter image description here

и щелкните по нему правой кнопкой мыши, выберите View Bitmap

enter image description here

0 голосов
/ 08 марта 2012

Вы можете подключить USB-соединение и скопировать файл на другой компьютер, используя дополнительные инструменты для расследования.

Некоторые устройства могут быть настроены на сброс текущего экрана в файловую систему при нажатии кнопки запуска. Может быть, это случилось с вами.

0 голосов
/ 08 марта 2012

Просто возьмите ввод для изображения и преобразуйте его в растровый объект, используя файл входного потока / поток данных Также добавьте журналы для просмотра данных по каждому используемому изображению.

...