Форум программистов, компьютерный форум 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. Просмотров 397. Ответов 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 секунды.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 10:45     Android OutOfMemory error while scaling big images
Посмотрите здесь:

Android Android: internal error
OutOfMemory при создании большого Bitmap Android
google map v2 outOfMemory Android
Структура ОС Android Android
Анимация в Android Android
Android studio emulator error HAXM Android
Android и VS 2012 Android
В android studio - Ошибка: build.gradle error (23,17) Android
Музыка в android Android
Android Gradle build finished with 4 error(s). Android Studio. My First App
Android SQLite и android
Android Ошибка OutOfMemory в Service

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
21.07.2014, 10:50     Android OutOfMemory error while scaling big images #2
Цитата Сообщение от sunny_sunny Посмотреть сообщение
2000х2000
конечно вылетит эта ошибка.

найдите разрешение девайса, на котором занимаетесь отладкой в интернете - это будет его mdpi. Далее закидываем нужный размер в папку, а система уже сама растянет или сузит это изображение под размер.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
22.07.2014, 17:57     Android OutOfMemory error while scaling big images #3
sunny_sunny, низкая производительность потому, что картинки все висят в памяти. Что бы таких проблем небыло вам нужно использовать ссылки (References) благодаря чему сборщик мусора будет знать, что при недостатке памяти эти объекты можно удалить.
sunny_sunny
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 7
22.07.2014, 21:14  [ТС]     Android OutOfMemory error while scaling big images #4
Всем спасибо, вопрос решила нарезанием картинок под разные разрешения, все летает
Yandex
Объявления
22.07.2014, 21:14     Android OutOfMemory error while scaling big images
Ответ Создать тему
Опции темы

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