Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
sunny_sunny
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 7
#1

Android OutOfMemory error while scaling big images - Программирование Android

21.07.2014, 10:45. Просмотров 427. Ответов 3
Метки нет (Все метки)

Добрый день! Буду благодарна, если поможете решить небольшую проблемку.

Имеется несколько изображений (около пяти), которые я использую как фоновые в своем приложении. Все они имеют габариты 2000х2000 пикселей, чтобы нормально выглядеть даже на экранах планшетов с высокой плотностью пикселей. Я пытаюсь масштабировать изображение к размеру экрана, но каждый раз вылетает OutOfMemory error.

Код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void setBackgroundImage(int imageId, View layout) {
    layout.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
    int targetW = layout.getMeasuredWidth();
    int targetH = layout.getMeasuredHeight();
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    bmOptions.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(context.getResources(), imageId, bmOptions);
    int photoW = bmOptions.outWidth;
    int photoH = bmOptions.outHeight;
 
    int scaleFactor = Math.min(photoW / targetW, photoH / targetH);
 
    bmOptions.inJustDecodeBounds = false;
    bmOptions.inSampleSize = scaleFactor;
    bmOptions.inPurgeable = true;
 
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageId,
            bmOptions);
    BitmapDrawable bg = new BitmapDrawable(context.getResources(), bitmap);
    layout.setBackgroundDrawable(bg);
}
Ошибка появляется, когда я вызываю "BitmapFactory.decodeResource(context.getResources(), imageId, bmOptions);" во второй раз. Можно это как-то исправить? Или я что-то упускаю и есть другой способ масштабирования фонов? Я бы позасовывала их по папкам drawable-*dpi, но не знаю, до каких размеров обрезать, чтобы подходило и для маленьких экранов, и для больших. С иконками попроще в этом плане

Я также пробовала запихнуть все фоны в папку 'drawable-nodpi'. Тогда ошибка не вылетает, но все равно очень низкая производительность приложения, каждую картинку загружает 1-3 секунды.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 10:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Android OutOfMemory error while scaling big images (Программирование Android):

Android Studio - failed Error:CreateProcess error=193, %1 - Программирование Android
Здравствуйте. Знаю, что не в ту категорию, но не знаю, где спросить . Прошу заранее понять и простить. Уже устал голову ломать . Ничего не...

Android: internal error - Программирование Android
Создал пустой проект под андроид. При попытке компиляции в эклипсе появляется вот такое ругательство. Заметил, что появилось после того...

Android studio emulator error HAXM - Программирование Android
Здравствуйте. Помогите разобраться с эмулятором в андроид студио. Перерыл интернет и на русском, и на английском не получается ничего. ...

Error while installing apk android IDEA - Программирование Android
просто нет слов, только решаешь одну проблему всплывают еще шесть. Вообщем, переустановил IDEA, поставил все сдк заново, разобрался с...

В android studio - Ошибка: build.gradle error (23,17) - Программирование Android
В android studio - Ошибка: build.gradle error (23,17), только установил, изучаю самостоятельно по книге и видео. Какая может быть причина...

Gradle build finished with 4 error(s). Android Studio. My First App - Программирование Android
Добрый день, уважаемые форумчане! Я - новичок в программировании под Андройд. Установил себе последнюю версию программы Android Studio...

3
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
21.07.2014, 10:50 #2
Цитата Сообщение от sunny_sunny Посмотреть сообщение
2000х2000
конечно вылетит эта ошибка.

найдите разрешение девайса, на котором занимаетесь отладкой в интернете - это будет его mdpi. Далее закидываем нужный размер в папку, а система уже сама растянет или сузит это изображение под размер.
0
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
22.07.2014, 17:57 #3
sunny_sunny, низкая производительность потому, что картинки все висят в памяти. Что бы таких проблем небыло вам нужно использовать ссылки (References) благодаря чему сборщик мусора будет знать, что при недостатке памяти эти объекты можно удалить.
0
sunny_sunny
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 7
22.07.2014, 21:14  [ТС] #4
Всем спасибо, вопрос решила нарезанием картинок под разные разрешения, все летает
0
22.07.2014, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2014, 21:14
Привет! Вот еще темы с ответами:

google map v2 outOfMemory - Программирование Android
Подскажите пожалуйста, в чём может быть проблема. При перемещении карты google v2 в скором времени наступает outOfMemory. Ссылаясь на этот...

Ошибка OutOfMemory в Service - Программирование Android
Используется Retrofit и GsonConverterFactory Есть фрагнмент поиска, при открытии запускается сервис и периодически(8 секунд)...

Как сохранить все превьюшки из google/images или yandex/images или gogo.ru/images - Web
Мне требуется много маленьких картинок, которые можно взять на поиске по картинкам. Скажите пожалуйста, как это сделать? Если сохранять из...

Как избавиться от ошибки OutOfMemory error? - Java ME
Создал приложение для вк на j2me. Чисто для себя, потому что телефон старый. Выдает через некоторое время ошибку out of memory error. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru