Исключение из-за недостатка памяти при применении фильтров к изображениям (Android) - PullRequest
4 голосов
/ 20 декабря 2011

Я пытаюсь применить некоторые фильтры к изображению.Чтобы применить фильтр, я должен сначала создать массив:

int[] arr = new int[image.width*image.height];// to store each pixel

, а затем я могу передать его функции, которая будет применять фильтр.

Проблема: Если у меня есть изображение размером более 500 КБ (около), OOME приветствует меня.

Что я пробовал: Разделите полное изображение на четыре частии применить фильтр к каждой части, а затем присоединиться к ним, но я снова получил OOME в той же строке, т. е. при создании массива int.

Я не хочу идти на компромисс в отношении качества изображения иуменьшить его.

Что я действительно хочу, так это просто подсказка / логика / архитектура , которая может работать с большим изображением размером 5 МБ ....

Ответы [ 4 ]

3 голосов
/ 20 декабря 2011

попробуйте использовать largeHeap в manifest.xml под тегом приложения add

android:largeHeap = "true"
2 голосов
/ 24 июля 2013

лучший способ обработки действительно больших изображений - это использование JNI.

Может быть, может помочь и Renderscript, но я не уверен насчет ограничений памяти.

1 голос
/ 20 декабря 2011

Один из способов справиться с этим - разместить изображение, как вы и предлагали.Поймайте OOME и продолжайте уменьшать размер ваших тайлов вдвое до тех пор, пока массив не распределится успешно.

Затем обработайте каждую плитку последовательно, повторно используя массив каждый раз.

0 голосов
/ 20 декабря 2011

Чтобы ответить на ваш вопрос, я бы рассмотрел его в двух разных частях.

  1. как избежать исключений нехватки памяти ... вы можете обратиться по этой ссылке. Вот мой ответ.

  2. Во-вторых, если вы хотите показать изображение размером до 5 МБ. Вы можете попробовать иметь буферное хранилище. загружайте изображения по частям, сохраняйте их во временном файле и продолжайте очищать буферное хранилище Я не реализовал это сам. Вы можете попробовать.

спасибо: N_JOY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...