0

я использую фотографии, которые хранятся на Environment.getDataDirectory() и они являются 1920 и 1080 ширина высоко и я хочу, чтобы загрузить их в Image View с этим кодом:нагрузки огромное изображение из файла

File imgFile = new File(Environment.getDataDirectory() + "/data/com.My.Package/files/Pictures/Sun.jpg");     
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
       zoomImage.setImageBitmap(myBitmap); 

Но Android 6.0 (Samsung Galaxy S6 Эдж) Я получаю эту ошибку , на Android 5 (HTC One) это работает довольно хорошо:

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (3240x5760, max=4096x4096)

Так что теперь к вопросу: Есть ли способ избежать этой ошибки и без падения качества (мне нужно будет это качество, потому что вы можете увеличить изображение)

ответ

0

Я думаю, вам стоит попробовать загрузить его с помощью Glide.

Процедура довольно прямо вперед, и его быстро, и не будет никаких ООМ, надеюсь

Просто транслируют это в вашем build.gradle

compile 'com.github.bumptech.glide:glide:3.7.0' 

, а затем

Glide 
    .with(this) 
    .load(imgFile) 
    .into(zoomImage); 

и это это, вы никогда не столкнетесь с OOM снова, надеюсь, я работал с изображениями в моих многочисленных приложениях, и я никогда не сталкивался с OOM с Это.

Надеюсь, это поможет

+0

ли это chache фотографии? – rib

+0

по умолчанию, но если вы не хотите этого делать, вы можете просто добавить '.diskCacheStrategy (DiskCacheStrategy.NONE)' и не будет кэшировать изображение. – Max

+0

Это дает мне эту ошибку, если я пытаюсь загрузить изображение, stack = java.lang.NoClassDefFoundError: Сбой разрешения: Lcom/bumptech/glide/Glide; – rib

0

Как ваша ошибка указывает , ваше изображение слишком велико для загрузки.

В основном прямо сейчас вы загружаете все изображение в память.

Вы должны получить меньшую/уменьшенную версию растрового изображения.

Вы можете легко сделать это с помощью BitmapFactory.Options,

Вот ссылка, которая идет в подробности о рекомендуемой методике, чтобы использовать для этого: developer.android.com/training/displaying-bitmaps/load-bitmap .html

+0

Но разве я потеряю качество и почему он не работает на Android 6, а на Android 5? – rib

+0

Качество изображения не обязательно ориентировано на версию Android, но также может варьироваться от телефона к телефону. Ваше приложение не может даже обрабатывать текущее растровое изображение, поэтому качество должно быть наименьшим из ваших проблем. Я бы посоветовал выполнить некоторые тесты, используя другой размер выборки. – AndroidEnthusiast

+0

Но без «высокого» качества вы ничего не увидите, если вы увеличите масштаб. – rib