Как устранить ошибку нехватки памяти при преобразовании растрового изображения в формат строки Base64 и наоборот? - PullRequest
1 голос
/ 27 апреля 2011

Мне нужно загрузить некоторые захваченные изображения на веб-сервер .net, используя запрос SOAP.Поскольку SOAP также принимает строки для файлов изображений, я конвертирую захваченные файлы изображений в строку, используя android.util.Base64 class.

Но при преобразовании файлов изображений в строки с использованием формата кодировки Base64 возникает ошибка нехватки памяти.

Как устранить ошибку нехватки памяти при преобразовании файлов изображений в строки формата Base64?

Ответы [ 3 ]

4 голосов
/ 27 июля 2011

Я думаю, что Бен говорит, чтобы вы разбили свое растровое изображение и закодировали каждый кусок отдельно. С другой стороны, вам придется реконструировать байтовый массив с несколькими блоками base64. Каждый блок должен быть упорядочен, и, вероятно, лучше всего включать окончательный размер байтового массива, чтобы получатель знал, какой размер выделить.

что-то вроде:

byte[] bitmap = byte[size];
int j = 1;
write to xml stream: final size = size
for (i=0; i<size; i+chunkSize) {
    write to xml stream: base64.encode(bitmap from i to i+chunkSize)
    write to xml stream: order = j++
}

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

0 голосов
/ 12 февраля 2013

Декодирование в растровое изображение будет означать больше памяти.Особенно большая трата, если вы просто хотите конвертировать из JPEG в Base64.

В большинстве ответов, которые я видел, они конвертируют его в JPEG> BITMAP> Byte []> Base64.Большая часть исключения памяти возникает, когда вы декодируете большой JPEG в растровое изображение.

Я все еще ищу хорошее решение, но зацените этот ответ.Он конвертирует файл байтового массива в Base64 напрямую.

https://stackoverflow.com/a/10160856/499752

0 голосов
/ 27 апреля 2011

Можете ли вы прочитать каждый файл изображения в виде фрагментов, преобразовать их, добавить их в файл по ходу и затем прочитать этот файл обратно в виде фрагментов при отправке?

...