Редактировать: на этот вопрос уже был дан ответ Странно нехватка памяти при загрузке изображения в растровый объект (два ответа с наибольшим количеством голосов).Он также использует опцию inSampleSize
, но с небольшим методом для автоматического получения соответствующего значения.
Мой оригинальный ответ:
inSampleSize
из BitmapFactory.Options
класс может решить вашу проблему (http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize).. Он работает, создавая растровое изображение с результирующей шириной и высотой на 1 / inSampleSize
, чем оригинал, что снижает потребление памяти (на inSampleSize
^ 2?). Вы должны прочитатьдокумент перед его использованием.
Пример:
BitmapFactory.Options options = new BitmapFactory.Options();
// will results in a much smaller image than the original
options.inSampleSize = 8;
// don't ever use a path to /sdcard like this, but I'm sure you have a sane way to do that
// in this case nebulae.jpg is a 19MB 8000x3874px image
final Bitmap b = BitmapFactory.decodeFile("/sdcard/nebulae.jpg", options);
final ImageView iv = (ImageView)findViewById(R.id.image_id);
iv.setImageBitmap(b);
Log.d("ExampleImage", "decoded bitmap dimensions:" + b.getWidth() + "x" + b.getHeight()); // 1000x485
Однако здесь он будет работать только с изображениями, которые, я думаю, inSampleSize
^ 2 раза превышают размер разрешенной памяти иприведет к снижению качества небольших изображений. Хитрость заключается в том, чтобы найти соответствующий inSampleSize.