2015-10-15 3 views
0

Я делаю изображение галереи. Я получаю путь изображения в устройстве и разбираюсь с URI. Затем я использую Picasso Android Lib для загрузки изображения в Imageview в Gridview. Он отлично работает, пока не появится большое изображение. Пикассо не может загрузить большое изображение. Я получил ошибку Out Of Memory. Есть ли предложение загрузить большое изображение в ImageView? И есть ли lib для загрузки изображения в ImageView может вместо Пикассо?Android: Загрузка большого изображения из хранилища в ImageView

+0

Вы можете использовать библиотеку [this] (https://github.com/nostra13/Android-Universal-Image-Loader) –

+0

Я попробую ImageLoader lib для вашего обращения. Итак, ImageLoader лучше, чем Пикассо? –

+0

да его лучше, я тоже давно перешел на это с Пикассо. –

ответ

1

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

0

Узнайте, как использовать общие методы для обработки и загрузки объектов Bitmap таким образом, чтобы поддерживать компоненты пользовательского интерфейса (UI) и избегать превышения предела памяти приложения. Если вы не будете осторожны, растровые изображения могут быстро потреблять ваш доступный бюджет памяти, приводящий к сбою приложения из-за страшного исключения: java.lang.OutofMemoryError: размер растрового изображения превышает бюджет VM.

Есть целый ряд причин, почему загрузки растровых изображений в вашем Android приложения сложно:

Мобильные устройства обычно сдерживают системные ресурсы. У устройств Android может быть всего 16 МБ памяти, доступной для одного приложения. Документ определения совместимости Android (CDD), раздел 3.7. Совместимость с виртуальной машиной дает требуемую минимальную память приложений для различных размеров экрана и плотности. Приложения должны быть оптимизированы для выполнения в рамках этого минимального предела памяти. Однако имейте в виду, что многие устройства настроены с более высокими ограничениями.

Растровые изображения занимают много памяти, особенно для богатых изображений, таких как фотографии. Например, камера на Galaxy Nexus принимает фотографии размером до 2592x1936 пикселей (5 мегапикселей). Если используется битмап-конфигурация ARGB_8888 (по умолчанию от Android 2.3), то загрузка этого изображения в память занимает около 19 МБ памяти (2592 * 1936 * 4 байта), что сразу же исчерпало ограничение для каждого приложения на некоторых устройствах. Пользовательский интерфейс приложения для Android часто требует сразу нескольких битмапов. Компоненты, такие как ListView, GridView и ViewPager, обычно включают в себя несколько растровых изображений на экране одновременно со многими более потенциально готовыми к показу при щелчке пальца.

Read More Regarding this issue

+0

Это декодирование растрового изображения, верно? Итак, есть ли lib для загрузки изображения в ImageView, а вместо Picasso? И как я могу решить эту проблему с Пикассо? –

0

Вот пример, который я когда-то, но он не совершенен! (К сожалению)

Вы можете уменьшить размер растрового изображения:

public Bitmap resizeBitmap(Bitmap bitmap) { 
    if (bitmap.getHeight() > 4096 || bitmap.getWidth() > 4096) { 
     int width = (int) (bitmap.getWidth() * 0.9); 
     int height = (int) (bitmap.getHeight() * 0.9); 
     Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); 

     resizeBitmap(resizedBitmap); 
     returnresizedBitmap; 
    } else { 
     return bitmap; 
    } 
} 

Если я должен сделать это снова: (не тестировалось)

public Bitmap resizeBitmap(Bitmap bitmap) { 
    int originalWidth = bitmap.getWidth(); 
    int originalHeight = bitmap.getHeight(); 

    if (originalWidth > 4096 || originalHeight > 4096) { 

     int height; 
     int width; 

     if(originalHeight > originalWidth) { 
      height = 4096; 
      width = originalWidth/(originalHeight/4096); 
     } else { 
      width = 4096; 
      height = originalHeight/(originalWidth/4096); 
     } 

     Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); 

     return resizedBitmap; 
    } else { 
     return bitmap; 
    } 
} 
0

Вы можете пользовательских recent-images библиотека для вашей цели. Это очень простая и простая в использовании библиотека. Он создает миниатюру изображения для отображения в gridview, а затем щелчком открывается оригинал.

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