Android, как загрузить / сохранить оригинальный размер растрового изображения без OutOfMemory - PullRequest
0 голосов
/ 16 июня 2011

Я прочитал много дискуссий о дилемме inSampleSize OutOfMemory.
Не могу найти хорошее решение, поэтому я задаю вопрос об этом.
В настоящее время я загружаю растровое изображение с inSampleSize = 4.
Это даст мнеРастровое изображение размером 648x388.
Исходный размер на диске - 2592x1592.

Я пишу текст на растровом изображении 648x388 и сохраняю его обратно на диск.
Я пишу на 648x388, потому что 2592x1592 дает мне OutOfMemory.

Способ, которым это работает, заключается в том, что в цикле while можно сохранить 1-10 648x388 битовых карт.
Я хочу изменить этот цикл, чтобы сохранить 1-10 2592x1592 битовых карт.

Как я могу безопасно загрузить 2592x1592?
Меня не волнует разрешение, уменьшающееся на 60% и более.
Пока растровое изображение имеет тот же размер 2592x1592.
Есть лиМожно, возможно, сохранить размер, но сделать растровое изображение более тонким,
удаляя цвет без ухудшения качества.

Моей первой мыслью было что-то подобное, чтобы получить самый большой растровый образ, который я мог получить: я не проверял это, ночувствую, что это плохой способ

boolean work = true;
int insample = 2;
BitmapFactory.Options options = new BitmapFactory.Options();
while(work){
    try{
    options.inSampleSize = insample;
        bitmap = BitmapFactory.decodeFile(filePath,options);
        work = false;
    }catch(Exception e){
        insample++;
    }
}

любая помощь будет благодарна.

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

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

И, кстати, вы не можете перехватить исключение outOFMemory.приложение просто вылетает.

1 голос
/ 16 июня 2011

Существует жесткое ограничение на размер процесса в Android, и 4-мегапиксельное изображение с четырьмя байтами на пиксель поразит его само по себе (на многих устройствах), без места для вашей программы.

Iдумаю, вам нужно сделать одно из двух: создать веб-сервис для обработки изображений на сервере / в облаке;или научитесь выполнять обработку изображений «на лету», манипулируя данными напрямую, а не используя растровое изображение.

...