169 похожих чатов

Всем привет. Столкнулась со следующей проблемой. Необходимо сделать ресайклер c

картинками в высоком разрешении. Картинки лежат на девайсе в jpg. При загрузке в адаптере ресайклера ловлю OOM.
Картинки грузила как битмапы. Понимаю, что в памяти под битмапу выделяется (width * height * pixel format) байт. В моем случае битмапа получается слишком большая (jpg файл 2Мб = битмапа 70Мб)

Если ли другие способы, чтобы отобразить картинку без потери качества и с меньшим выделением памяти?

19 ответов

10 просмотров

use glide

Alena-Novosvit Автор вопроса

уже, не спасает

можно в манифесте поставить largeHeap="true" но это не решение

Alena-Novosvit Автор вопроса

Если грузить картинку через глайд без кастомных настроек, то качество картинки сильно проседает. Это критично в моем случае. Картинка в дальнейшем будет зумиться в х5-х10. А при .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) - ООМ

мне кажется нужно в момент зума заменять на более высокое качество

А с чего вы решили, что у пользователя будет столько свободного ОЗУ?

Alena-Novosvit Автор вопроса

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

Какой критерий потери качества? Есть ли смысл пытаться показывать картинку, например 10000х10000 пикселей, если даже таких экранов в природе не существует? Покопайтесь в glide, там могут быть параметры для уменьшения качества и/или размеров картинки при загрузке.

там еще Picasso есть, альтернатива глайду, мб там что найдешь

Пикассо через таргет попробуйте

Alena-Novosvit Автор вопроса

Спасибо за совет, как раз и смотрю в сторону декод форматов и переопределения таргетов

Хозяйке на заметку от Гугла: https://developer.android.com/topic/performance/graphics/load-bitmap

Alena-Novosvit Автор вопроса

уже читала) К сожалению, там ни слова про сохранение качества при сжатии.

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

Работал. Делаешь от картинки эскиз 200×200 или 300 х300(ThumbnailUtils), хранишь его вместе с картинкой (в файле, в кэшах).

Я так понимаю, что все равно нужно большую грузить, и вот тогда и приходит OOM.

У тебя так большая грузится один раз.

Она тоже может вызвать OOM

Нет. Работал с 4096×4096 - одна даже на говнофоне обычно тянется. С largeHeap несколько

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта