Загрузите большое растровое изображение в массив байтов

Я получаю ошибку OOM при загрузке большого растрового изображения с помощью BitmapFactory.decodeResource. Я видел другие предложения по сжатию изображения, но для моего приложения сохранение качества абсолютно необходимо. В конце концов мне нужно получить изображение в массив байтов/пикселей. Есть ли способ получить все пиксели в массив без снижения качества или «мозаики» растрового изображения?

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


person user3727843    schedule 10.07.2014    source источник
comment
О каком большом изображении идет речь и сколько памяти использует остальная часть вашего приложения?   -  person Gabe Sechan    schedule 10.07.2014
comment
Почему бы не обращаться с растровым файлом как с файлом и не использовать более традиционные методы его чтения с помощью FileInputStream и тому подобного?   -  person Grambot    schedule 10.07.2014
comment
На данный момент приложение их не использует. Формат jpeg 3,5 мб (3200x2500). При сохранении в формате bmp получается около 25 МБ. Может быть, я должен распаковать его в памяти?   -  person user3727843    schedule 10.07.2014
comment
@TheCapn будет ли работать создание FileInputStream, а затем чтение 3/4 байта за раз для каждого пикселя? Я не знал о FileInputStream.   -  person user3727843    schedule 10.07.2014
comment
Вы сделаете цикл, в котором вы читаете разумную сумму из входного потока, скажем, 65534 байта, и добавляете к массиву байтов, пока не закончите. Не возитесь с 4 байтами, так как это замедляет работу.   -  person greenapps    schedule 10.07.2014
comment
благодаря. Кажется, это сработало!   -  person user3727843    schedule 11.07.2014


Ответы (1)


Взгляните на документацию Android по обработке больших растровых изображений http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

person erik    schedule 10.07.2014
comment
У меня есть, но мне нужна полномасштабная версия изображения. Я работаю с некоторым элементарным распознаванием изображений (аналогично поиску штрих-кодов), поэтому необходимо качество пикселей. - person user3727843; 10.07.2014
comment
да. Но поскольку на данный момент все, что мое приложение делает, это загружает растровое изображение (это базовый приветственный мир, который я использую для тестирования своего кода), я не думал, что это будет иметь какое-либо значение. - person user3727843; 10.07.2014
comment
вы должны понимать, что каждое устройство будет иметь разную память, вы можете попытаться переработать растровое изображение после того, как получите массив байтов, но вам, вероятно, придется уменьшить изображение, нравится вам это или нет. - person erik; 10.07.2014