2011-12-21 3 views
0

Я получаю довольно сумасшедший с этим вопросом:закодированных byte64 изображения вызывает OutOfMemoryError андроид

Я получаю каждый раз, когда я открываю OutOfMemoryError моего приложения. В какой-то момент он загружает изображение с сервера, но он кодирует строку Base64.

Whay я в основном:

decodedString = Base64.decode(imagen_codificada); 

Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, 
          decodedString.length); 

Но я получаю проклятую OOME, каждый раз.

Если пытался с этим:

BitmapFactory.Options options=new BitmapFactory.Options(); 
         options.inSampleSize = 8; 

Даже настройкой параметры 128, что является сумасшедшим, но все-таки выходит из строя ...

Есть ли способ уменьшить размер строки кодификации изображения каким-то образом перед его расшифровкой? Я не могу работать прямолинеен с изображением, так как он используется для многих других вещей, жгуты приложения и в настольных средах ...

Я придаю журнал ОШИБКА:

12-21 10:36:27.032: E/dalvikvm-heap(5508): 10119168-byte external allocation too large for this process. 12-21 10:36:27.032: E/dalvikvm(5508): Out of memory: Heap Size=5823KB, Allocated=4351KB, Bitmap Size=720KB, Limit=13692KB 12-21 10:36:27.032: E/dalvikvm(5508): Trim info: Footprint=6343KB, Allowed Footprint=6343KB, Trimmed=520KB 12-21 10:36:27.032: E/GraphicsJNI(5508): VM won't let us allocate 10119168 bytes 12-21 10:36:27.192: E/AndroidRuntime(5508): FATAL EXCEPTION: main 12-21 10:36:27.192: E/AndroidRuntime(5508): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

EDIT: решаемый с ЭТИМ:

decodedString = Base64.decode(imagen_codificada); 
        System.gc(); 
        BitmapFactory.Options options=new BitmapFactory.Options(); 
        options.inSampleSize = 8; 
        InputStream input = new ByteArrayInputStream(decodedString); 
        Bitmap decodedByte = BitmapFactory.decodeStream(input, null, 
          options); 
        menu.setNombreApellido(decodedByte); 

Спасибо всем!

+0

Может быть, это поможет вам: http: //stackoverflow.com/questions/477572/android-strange-out-of-memory-issue/823966#823966 –

+0

Привет, попробуй и прокомментируй. Благодаря! – vicks630

+0

Привет, я просто понял, что не могу использовать decodeByteArray с параметрами, поэтому мне нужно будет изменить массив байтов в поток. Я постараюсь, а затем коном. – vicks630

ответ

1

попробуйте это
byte[] decodedString = (byte[])Base64.decode(imagen_codificada);
Это вернет u бит массива напрямую. Теперь вы можете использовать
BitmapFactory.Options options=new BitmapFactory.Options(); // options.inSampleSize = 8; чтобы уменьшить вашу фотографию.

+0

Вопрос решается следующим образом: decodedString = Base64.decode (imagen_codificada); \t \t \t \t \t System.gc(); \t \t \t \t \t BitmapFactory.Options options = new BitmapFactory.Options(); \t \t \t \t \t options.inSampleSize = 8; \t \t \t \t \t InputStream input = new ByteArrayInputStream (decodedString); \t \t \t Растровые decodedByte = BitmapFactory.decodeStream (вход, нулевой, \t \t \t \t \t варианты); \t \t \t menu.setNombreApellido (decodedByte); – vicks630

+0

@ vicks630: y вы вызываете inputStream? –

Смежные вопросы