Хобрук: Ваш путь к мастерству в программировании

Закодированное изображение byte64 вызывает OutOfMemoryError android

Я схожу с ума по этому вопросу:

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

Что я делаю в основном:

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-байтовое внешнее выделение слишком велико для этого процесса. 12-21 10:36:27.032: E/dalvikvm(5508): Недостаточно памяти: размер кучи = 5823 КБ, выделено = 4351 КБ, размер растрового изображения = 720 КБ, предел = 13692 КБ 12-21 10:36:27.032: E/dalvikvm( 5508): информация об обрезке: размер = 6343 КБ, разрешенный размер = 6343 КБ, усечено = 520 КБ 12–21 10:36:27.032: E/GraphicsJNI (5508): виртуальная машина не позволяет нам выделить 10119168 байт 12–21 10:36: 27.192: E/AndroidRuntime(5508): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main 12-21 10:36:27.192: E/AndroidRuntime(5508): java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины

РЕДАКТИРОВАТЬ: РЕШЕНО С ЭТИМ:

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);

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


  • может быть, это поможет вам: stackoverflow.com/questions/477572/ 21.12.2011
  • Привет! Попробую и откомментирую. Спасибо! 21.12.2011
  • Привет еще раз, я только что понял, что не могу использовать decodeByteArray с параметрами, поэтому мне нужно преобразовать массив байтов в поток. Попробую потом отпишусь. 21.12.2011

Ответы:


1

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

21.12.2011
  • Проблема решается следующим образом: decodedString = Base64.decode(imagen_codificada); Система.gc(); BitmapFactory.Options options=новый BitmapFactory.Options(); options.inSampleSize = 8; InputStream input = новый ByteArrayInputStream (decodedString); Bitmap decodedByte = BitmapFactory.decodeStream (ввод, ноль, параметры); menu.setNombreApellido (decodedByte); 21.12.2011
  • @ vicks630: ты вызываешь inputStream? 21.12.2011
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..