2015-03-16 5 views
1

в моем приложении мне нужно скачать изображения с высоким разрешением с моего сервера. Я планирую использовать залп. загрузка изображения хорошо работает для небольших изображений. Для некоторых изображений с высоким разрешением оно исключает исключение из памяти. Я протестировал с некоторыми образцами изображения, чтобы исключить из памяти исключение для некоторых изображений. Я также видел, что с большой выборкой изображений с большой выборкой для эффективного отображения в этой ссылке loading large images efficiently .i не знаю, что это автоматически уменьшит разрешение изображения для изображений с высоким разрешением.android volley изменит размер (подвыборка) автоматически автоматически

код для загрузки изображения с использованием волейбола в изображение.

imgloader_disk.get(url, new ImageListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 


     } 

     @Override 
     public void onResponse(ImageContainer response, boolean arg1) { 
      if (response.getBitmap() != null) { 
       mImageView.setImageBitmap(response.getBitmap()); 

      } 
     } 
    }); 
+0

Волейбол должен делать это автоматически. отправьте соответствующий код. –

+0

@GilMoshayof, отредактированный выше, с кодом загрузки изображения. –

ответ

1

Im предполагая, что вы используете ImageLoader объект для запуска запроса, чтобы получить изображение, которое нужно.

ImageLoader.get() имеет перегруженный метод, который принимает MaxWidth/MaxHeight параметры, которые вы должны всегда использование (если вы не знаете, за то, что изображение вы выборки разумно размера):

public ImageContainer get(String requestUrl, ImageListener imageListener, int maxWidth, int maxHeight, boolean withCache) 

Вы можете используйте размер ImageView, изображение будет отображаться, или - если вы не знаете размер - вы должны использовать ширину/высоту экрана.

После того, как вы передадите эти переменные, Volley позаботится об остальном, уменьшив масштаб изображения до размера не более желаемого.

Помните, что в отличие от iOS, Android очень ограничивает память, которую вы выделяете в своем приложении, и это особенно распространено с растровыми изображениями. Вы должны приложить все усилия, чтобы выделить только то, что вам нужно, и освободить ресурсы, как только они вам больше не понадобятся.

1

Ваш сервер не должен иметь изображения большого размера, Независимо от того, какую библиотеку вы используете вы все равно будете иметь Out of memory exception, потому что размер кучи по умолчанию для любого андроида приложения ограничено т.е. 16Мб. Как только вы будете потреблять этот размер кучи, вы увеличиваете его или нет, у вас определенно будет исключение из памяти. Поэтому рекомендуется не использовать изображения с высоким разрешением на сервере.

+0

в моем приложении у меня есть функция, которая даст информацию до 3x zooming. Я планирую использовать https://github.com/davemorrissey/subsampling-scale-image-view this lib для обработки динамической подвыборки. но я должен предоставить изображение в lib как bitmap/internal file. в то время как я пытаюсь декодировать jpeg, чтобы растровое преобразование приложения oom –

+0

@ user1992200 Это ожидаемое поведение, либо компромисс с качеством изображения путем его масштабирования, либо вы можете использовать изображения меньшего размера. это единственное решение. Каким-то образом мобильные телефоны Hi-End не получают OOM, а остальные мобильные телефоны будут там определенно. Здесь применим закон Мерфи. –

+0

@DaveMorrissey. Какова цель попробовать изображение с 20 000 * 20 000 с максимально возможным разрешением для устройств Android, которые, как известно, 2560 x 1600? Аппаратное обеспечение может отображать только пиксели в соответствии с его ограничением. Умственность существует при декодировании изображения до точного размера устройства и предела памяти, загружая меньшую выборочную версию в памяти. –

0

добавить

android:largeHeap="true" 

для вашей AndroidManifest.xml