2011-12-15 4 views
0

У меня есть растровое изображение, я загружаю в SurfaceView, что составляет около 75KB (давать или принимать)Большой растровый для фона дает Oom ошибку

Код, я использую для вызова его или декодировать это

bmLargeImage = BitmapFactory.decodeResource(getResources(),R.drawable.campplan); 

ничего необычного на самом деле. Размер изображения составляет 1000х500 пикселей. Какая загрузка прекрасна, когда я захочу. Проблема в том, что я хочу, чтобы она была размером 2000x1000, что вдвое больше.

Я попытался изменить размер с этим кодом

bmLargeImage = Bitmap.createScaledBitmap(bmLargeImage, 2000, 1000, true); 

, но он дает мне ошибку ООЙ. Я попытался сохранить файл png как изображение размером 2000x1000 пикселей, и снова он дает исключение OOM. Это пока тестируется в эмуляторе. Но я думаю, что размер должен быть достаточным для загрузки, чего мне не хватает?

Примечание: Я хочу, чтобы это была большая причина, это фон для игры (думаю, что это фермерский или деревенский игровой фон farmrile), поэтому он должен быть большим и прокручиваемым, но я только управляю размером 1000x500.

+0

Каков размер кучи эмулятора? минимальный для телефонов - 16 Мб, но у большинства устройств больше. Изображение размером 2000x1000 может легко занять 8Mb ОЗУ. Это связано с тем, что изображение загружается в формат 'RGBA_8888' по умолчанию, который хранит для каждого пикселя 4 байта. Вкл. Для каждого из красного, зеленого, синего и альфа-каналов. Если в изображении нет альфа-изображения, 'createScaledBitmap' вернет изображение в формате RGB_565, которое будет стоить всего 2 байта на пиксель. Я считаю, что при создании масштабированного растрового изображения вы также будете временно иметь две копии в памяти, что еще больше увеличивает использование памяти. – Wozza

+0

Размер изображения (75kb) не имеет значения. Могу добавить. К сожалению, проблемы с памятью при работе с большими растровыми изображениями отсутствуют. Вы должны быть очень осторожны с использованием вашей памяти. Полагаю, вы могли бы подумать о том, как вы накладываете фоновое изображение и загружаете фрагменты по мере необходимости и вызывая 'recycle()' на растровых изображениях, которые вы закончили. EDIT - я хотел сказать «временно иметь« обе копии в памяти »в моем последнем комментарии – Wozza

+0

true Я думаю. Надеюсь найти решение – Hok

ответ

0

проверить эту ссылку http://developer.sonyericsson.com/wp/2011/06/27/how-to-scale-images-for-your-android%E2%84%A2-application/ может быть полезным для вас, как как есть некоторая проблема с createScaledBitmap http://code.google.com/p/android/issues/detail?id=13038

+0

интересно. Мне нужно попробовать, когда я вернусь на свой ноутбук – Hok

Смежные вопросы