В процессе отслеживания серьезных проблем с памятью в моем приложении я просмотрел несколько дампов кучи из своего приложения, и большую часть времени у меня есть ОГРОМНОЕ растровое изображение, которое я не понимаю. знать о.
Он занимает 9,4 МБ, или 9 830 400 байт, или фактически изображение размером 1280x1920 с 4 байтами на пиксель.
Я проверил в Eclipse MAT, это действительно байт[9830400], который имеет одну входящую ссылку, которая является android.graphics.Bitmap
.
Я бы хотел сохранить это в файл и попробовать посмотреть. Я не могу понять, откуда это идет. Мое самое большое изображение во всех моих чертежах — это png 640x960, который занимает менее 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[]
.буфер[0]
красный, буфер[1]
зеленый и т. д.?